如何使用ActiveRecord获取hstore密钥

时间:2017-09-06 13:11:53

标签: ruby-on-rails ruby-on-rails-4 activerecord hstore

我有一个名为name_translations的hstore列的表,其中有很多翻译:

{ 'en' => 'En name', 'es' => 'Es name', ... }

它也在模型store_accessor :name_translations

中序列化

我需要在name_translations hstore中获取idru键。我尝试Model.select("id, name_translations -> 'ru'"),这是一个查询AR生成Model Load (0.6ms) SELECT id, name_translations -> 'ru' FROM "models"但输出只有id:

[#<Model id: 95>,
 #<Model id: 101>,
...

目前我停止了一些丑陋的代码:

Model.pluck(:id, :name_translations).map { |id, name| [id, name['ru']] }

什么方法可以让它变得更好?

1 个答案:

答案 0 :(得分:1)

您可以在as查询中使用select,例如:

=> result = Model.select("id, name_translations -> 'ru' as something")
=> result.first.something
  

但输出只有id:

     

[#<Model id: 95>, #<Model id: 101>, ...

这就是AR的工作方式,如果你使用动态属性,它从未在输出中显示,因为它不是真正的列,而是别名