如何使用 ActiveRecord 提取 hstore 键
How to pluck hstore key with ActiveRecord
我有 table hstore 列名为 name_translations
有很多翻译:
{ 'en' => 'En name', 'es' => 'Es name', ... }
也在模型store_accessor :name_translations
中连载
我需要在 name_translations hstore 中获取 id
和 ru
密钥。我试过 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']] }
有什么方法可以让它变得更好?
您可以在select
查询中使用as
,例如:
=> result = Model.select("id, name_translations -> 'ru' as something")
=> result.first.something
but output has only ids:
[#<Model id: 95>, #<Model id: 101>, ...
这就是 AR 的工作原理,如果您使用的是动态属性,它永远不会显示在输出中,因为它不是真正的列,它是一个 别名 。
我有 table hstore 列名为 name_translations
有很多翻译:
{ 'en' => 'En name', 'es' => 'Es name', ... }
也在模型store_accessor :name_translations
我需要在 name_translations hstore 中获取 id
和 ru
密钥。我试过 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']] }
有什么方法可以让它变得更好?
您可以在select
查询中使用as
,例如:
=> result = Model.select("id, name_translations -> 'ru' as something")
=> result.first.something
but output has only ids:
[#<Model id: 95>, #<Model id: 101>, ...
这就是 AR 的工作原理,如果您使用的是动态属性,它永远不会显示在输出中,因为它不是真正的列,它是一个 别名 。