我在Rails4项目中使用hstore_translate来处理 我的I18n需要。
假设我有以下型号:
class Thingy < ActiveRecord::Base
translates :name
end
将表格在迁移中定义为
create_table :thingies do |t|
t.hstore name_translations
end
add_index ::thingies, :name_translations, using: :gin
在我的Ruby代码中,我希望检索names
的所有ids
和Thingies
的列表,其中包含特定locale
中的名称。
以前,在我Thingy
有本地化name
之前,我可以做
thingies = Thingy.order(:name).pluck(:id, :name)
现在我在做
thingies = Thingy.where("name_translations ? 'en'").order("name_translations -> 'en'").to_a.map do |t|
{id: t.id, name: t.name}
end
但我不禁觉得有一种方法可以更好地利用Postgres在一行代码中完成所有操作,而无需在Ruby中调用循环。
答案 0 :(得分:2)
我已经尝试了一些试验和错误。
thingies = Thingy.where("name_translations ? 'en'")
.order("name_translations -> 'en'")
.pluck(:id, ("name_translations -> 'en'"))
完成这项工作。
它不是很干,但它有效。