我正在使用 hstore_translate在 Rails4 项目中处理 我的 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 代码中,我希望检索 Thingies
的所有 names
和 ids
的列表,名称在特定 语言环境
。
以前,在我的 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 中调用循环。
最佳答案
我已经通过反复试验解决了这个问题。
thingies = Thingy.where("name_translations ? 'en'")
.order("name_translations -> 'en'")
.pluck(:id, ("name_translations -> 'en'"))
完成任务。
它不是很干,但它确实有效。
关于ruby-on-rails - 返回从 hstore 中提取的特定值(Postgres + hstore_translate gem),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26921553/