Ruby on rails 如何使用ActiveRecord仅选择部分json(存储在Postgres中)

Ruby on rails 如何使用ActiveRecord仅选择部分json(存储在Postgres中),ruby-on-rails,json,postgresql,activerecord,jsonb,Ruby On Rails,Json,Postgresql,Activerecord,Jsonb,假设我有一个模型用户,它有一个名为settings的json类型字段。假设该字段大致如下所示: { color: 'red', language: 'English', subitems: { item1: true, item2: 43, item3: ['foo', 'bar', 'baz'] } } 如果我选择用户。选择:设置,我将获得每个用户的所有设置。但我只想获得用户的语言。我尝试了两种方法: User.sel

假设我有一个模型用户,它有一个名为settings的json类型字段。假设该字段大致如下所示:

{
  color: 'red', 
  language: 'English', 
  subitems: 
    {
      item1: true, 
      item2: 43, 
      item3: ['foo', 'bar', 'baz']
    }
}
如果我选择用户。选择:设置,我将获得每个用户的所有设置。但我只想获得用户的语言。我尝试了两种方法:

User.select("settings -> 'language'")

但这只返回空对象:

[#<User:0x007f381fa92208 id: nil>,
...]
这有可能吗?如果是-我可以只使用json还是需要切换到jsonb?

尝试使用User.selectsettings->“language”作为用户语言。
结果关系中的每个对象都应该响应用户语言。

空对象-确定吗?尝试在结果上执行.map&:attributes。您是对的。属性返回这个{id=>nil,?列?=>English}。让我困惑的是,通常情况下,当选择一个普通的非json属性时,对象会是这样的。然而,显然json选择的数据不是这样工作的,它只是以一种只输出已知列的方式定义的。select中的自定义列不知道在表中,因此它们不会打印到中,而是。干杯!很乐意帮忙。顺便说一句,如果不使用as user_语言命名所选值,结果仍然会包含该值,但会在一个奇怪的?列下?你介意看看这个问题吗?是的,我也看到了?专栏?钥匙
[#<User:0x007f381fa92208 id: nil>,
...]