我有一个文件名。我需要找到一个匹配file_name
属性的记录。
我的问题是文件名已被音译,这是一个单向过程。我无法 un 音译文件名,因此我没有其他选择,只能根据记录的file_name
属性的音译版本进行比较。
如果我只是比较文件名,我会这样做:
Example.where(file_name: file_name}
如果我能 un 音译file_name
我会这样做:
Example.where(file_name: ActiveSupport::Inflector.untransliterate(file_name)
但我不能,所以我怎么能有效地做相同的事情:
Example.all.detect do |e|
ActiveSupport::Inflector.transliterate(e.file_name) == file_name
end
答案 0 :(得分:3)
添加另一个包含音译值的字段。然后很容易:
Example.where(transliterated_file_name: file_name)
如果它不是一个选项,那么它并不容易。您可以将all替换为find_each,但仍需要在应用程序级别上比较值。
答案 1 :(得分:1)
添加新列可以像Tumas建议的那样工作,但是如果您使用的数据库支持将字段转换为ASCII,则可能需要考虑该选项。
<强> MySQL的:强>
Example.where("file_name COLLATE utf8_general_ci = ?", file_name)