返回从hstore中提取的特定值(Postgres + hstore_translate gem)

时间:2014-11-14 01:33:54

标签: ruby-on-rails postgresql activerecord rails-i18n hstore

我在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的所有idsThingies的列表,其中包含特定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中调用循环。

1 个答案:

答案 0 :(得分:2)

我已经尝试了一些试验和错误。

thingies = Thingy.where("name_translations ? 'en'")
                 .order("name_translations -> 'en'")
                 .pluck(:id, ("name_translations -> 'en'"))

完成这项工作。

它不是很干,但它有效。