ruby-on-rails - rails 4 : Always use a Postgres function for a certain model field

标签 ruby-on-rails postgresql diacritics

我有一个模型 Location,其字段 name 通常包含变音符号 - 例如“Rhône-Alpes”、“Midi-Pyrénées”和“Île-”去法国”。

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

Location.find_by(name: 'Rhône-Alpes')
Location.find_or_create_by(name: 'Rhône-Alpes', country: 'France')

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

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

最佳答案

将逻辑下推到数据库层总是好的,但如果你一直在处理许多不同的项目,你可能需要在未来执行一个不带 unaccenting 的查找,然后在你不能轻易找到时遇到问题调试,因此在执行此操作时必须始终小心。

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

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

>> ActiveSupport::Inflector.transliterate("Rhône-Alpes")
=> "Rhone-Alpes"

关于ruby-on-rails - rails 4 : Always use a Postgres function for a certain model field,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27666213/

相关文章:

mysql - MySQL是否支持表继承?

sql - Postgres 字符 (50) 与 'some string' 比较

sql - 与当前行的属性值相关的SQL窗口函数中的窗口框如何表示?

javascript - 使用 window.location.search 时 url 中的字符发生变化

ruby-on-rails - HTTP 基本身份验证不适用于 Heroku 上的 resque-web

ruby-on-rails - rails 3.1 : Better way to expose an engine's helper within the client app

css - 在 Rails 应用程序中单击 `x` 时 Bootstrap 警报不会解除

ruby-on-rails - 如何在 Rails 4 中将 where 条件与 "or"链接起来?

Java - 带有重音符号的 InetSocketAddress 主机名

javascript - URL 中的重音符号,如何正确转义它们?