我有一个 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/