【问题标题】:How to pluck hstore key with ActiveRecord如何使用 ActiveRecord 提取 hstore 密钥
【发布时间】:2017-09-06 21:31:57
【问题描述】:

我有一个名为 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']] }

有什么办法让它变得更好?

【问题讨论】:

  • 您目前拥有的更好的 IMO。
  • @Зелёный 好吧,您的示例有效,但为什么我在 AR 输出中看不到 something?它仍然只有 ids

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


【解决方案1】:

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

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

但输出只有 id:

[#&lt;Model id: 95&gt;, #&lt;Model id: 101&gt;, ...

这就是 AR 的工作原理,如果您使用动态属性,它永远不会显示在输出中,因为它不是真正的列,而是 别名

【讨论】:

  • 我停止使用 pluck 的版本Model.pluck("id, name_translations -&gt; 'ru' as something") 谢谢!
猜你喜欢
  • 1970-01-01
  • 2013-09-29
  • 2018-12-30
  • 1970-01-01
  • 1970-01-01
  • 2012-07-21
  • 2022-10-01
  • 2019-04-28
  • 1970-01-01
相关资源
最近更新 更多