Rails 4:始终对特定模型字段使用Postgres函数

Sam*_*ing 9 postgresql ruby-on-rails diacritics

我有一个通常包含变音符号Location的字段的模型name- 例如"Rhône-Alpes","Midi-Pyrénées"和"Île-de-France".

在我的应用程序中,此模型以几种不同的方式使用,特别是对于名称的查询.例子包括:

Location.find_by(name: 'Rhône-Alpes')
Location.find_or_create_by(name: 'Rhône-Alpes', country: 'France')
Run Code Online (Sandbox Code Playgroud)

这些find方法的参数因应用程序而异.我的问题是:如何在unaccent()每次引用名称字段时确保调用某个Postgres函数(在这种情况下)?这意味着我可以搜索"Rhone"和"Rhône",并获得相同的结果.

是否最好覆盖find_byfind_or_create_by方法?如果是这样,最好的方法是什么?

Chr*_*sis 1

将逻辑下推到数据库层总是好的,但是如果您一直在处理许多不同的项目,那么将来您可能需要在不取消重音的情况下执行查找,然后在无法执行查找时遇到问题易于调试,因此在执行此操作时必须始终小心。

\n\n

不要重写 find_by 方法,不建议这样做,因为您可能会执行标准 find_by 并产生不可预见的后果。

\n\n

您是否考虑过在 find_by 之前清理输入?

\n\n
>> ActiveSupport::Inflector.transliterate("Rh\xc3\xb4ne-Alpes")\n=> "Rhone-Alpes"\n
Run Code Online (Sandbox Code Playgroud)\n