我有一个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 文字。实际的正则表达式看起来会更加丑陋。
name
和canonical_name
。我并不赞成破坏实际数据,仅仅是创造一种在没有变音符号的情况下搜索所有语言用户常用的方式。 - James A. Rosen