ruby-on-rails - 如何替换 Ruby 中带重音的拉丁字符?

标签 ruby-on-rails ruby activerecord unicode utf-8

我有一个 ActiveRecord 模型,Foo,它有一个 name 字段。我希望用户能够按名称搜索,但我希望搜索忽略大小写和任何重音。因此,我还存储了一个用于搜索的 canonical_name 字段:

class Foo
  validates_presence_of :name

  before_validate :set_canonical_name

  private

  def set_canonical_name
    self.canonical_name ||= canonicalize(self.name) if self.name
  end

  def canonicalize(x)
    x.downcase.  # something here
  end
end

我需要填写“something here”来替换重音字符。有什么比

x.downcase.gsub(/[àáâãäå]/,'a').gsub(/æ/,'ae').gsub(/ç/, 'c').gsub(/[èéêë]/,'e')....

而且,就此而言,由于我不使用 Ruby 1.9,我无法将这些 Unicode 文字放入我的代码中。实际的正则表达式看起来会更难看。

最佳答案

ActiveSupport::Inflector.transliterate(需要 Rails 2.2.1+ 和 Ruby 1.9 或 1.8.7)

例子:

>> ActiveSupport::Inflector.transliterate("àáâãäå").to_s => "aaaaaa"

关于ruby-on-rails - 如何替换 Ruby 中带重音的拉丁字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/225471/

相关文章:

ruby-on-rails - ruby,如何使用 AND & OR 构建 if block

Ruby 数组限制方法

ruby-on-rails - 目录 : Listing of subrecords

ruby-on-rails - 是否有任何额外的注入(inject)速记

ruby-on-rails - 使用字符串轮廓符号订购 Rails 模型

ruby-on-rails - Rails 4 x postgresql:ActiveRecord::InvalidForeignKey

ruby-on-rails - Rails/ActiveRecord - 创建一个我不使用的对象如何改变另一个对象的类型?

ruby-on-rails - Railscasts #37 未定义方法 'each' 为 nil :nilclass

ruby-on-rails - 克隆新创建的记录时忽略验证

ruby-on-rails - Ruby、Rails 和两个日期之间的差异