如何使用 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 中获取 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']] }

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

您可以在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 的工作原理,如果您使用的是动态属性,它永远不会显示在输出中,因为它不是真正的列,它是一个 别名