不确定是否有您知道的解决方法,但是在使用 globalize gem 时
class Menu < ActiveRecord::Base
translates :name
# other stuff ...
end
如果我按照标准编写活动记录查询,它会生成一个空集。
-- 一般情况下
Model.where(attribute: "Value")
不起作用,在哪里
Model.where('attribute = ?', 'Value')
确实有效。
--- 来自我的 Menu 模型控制台的真实示例:
2.3.0 (main):0 > Menu.where(name: "Lunch Boxes")
=> []
2.3.0 (main):0 > Menu.where('name = ?', "Lunch Boxes")
=> [#<Menu:0x007fbab6dc6838 id: 12, restaurant_id: 15, name: "Lunch Boxes", created_at: Wed, 05 Jul 2017 16:07:20 EDT -04:00, updated_at: Thu, 10 Aug 2017 14:48:38 EDT -04:00>]
谁能告诉我为什么会这样?
只是为了更好的衡量
轨道 4.2.6 红宝石 2.3.0
谢谢@mu-is-too-short - 不知道我自己要花多长时间才能弄清楚。
弄清楚发生了什么的技巧是将我与 sql 比较的两个命令转换为两个命令,这样我就可以确切地看到正在尝试的内容。
Menu.where(name: "Lunch Boxes").to_sql
Menu.where('name = ?', "Lunch Boxes").to_sql
这些分别产生:
=> "SELECT \"menus\".* FROM \"menus\" WHERE (name = 'Lunch Boxes')"
和
=> "SELECT \"menus\".* FROM \"menus\" INNER JOIN \"menu_translations\"
ON \"menu_translations\".\"menu_id\" = \"menus\".\"id\" WHERE
\"menu_translations\".\"name\" = 'Lunch Boxes' AND
\"menu_translations\".\"locale\" = 'fr'"
然后我直接在 psql 控制台中运行查询,并返回一个空集。因为它加入了 menu_translations 表,所以可以通过使用 Globalize gem 附带的模型助手来实现,即:
translates :name
SO然后我查看了翻译表,发现“Lunch Boxes”这个词不存在任何翻译,并且因为该属性name
是全球化的,所以需要翻译。
添加翻译,问题解决。希望这对其他人有帮助。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句