如何使用 ActiveRecord select 仅 json 的一部分存储在 Postgres 中

How to select only part of json, stored in Postgres, with ActiveRecord

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

{
  color: 'red', 
  language: 'English', 
  subitems: 
    {
      item1: true, 
      item2: 43, 
      item3: ['foo', 'bar', 'baz']
    }
}

如果我这样做 User.select(:settings) 我将获得每个用户的所有设置。但我只想获取用户的语言。我都试过了:

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

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

但这只是 returns 个空对象:

[#<User:0x007f381fa92208 id: nil>,
...]

这可能吗?如果是 - 我可以只使用 json 还是需要切换到 jsonb

尝试User.select("settings -> 'language' as user_language")。 结果关系中的每个对象都应响应 user_language.