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

Ale*_*pov 6 postgresql activerecord json ruby-on-rails jsonb

假设我有一个模型User,它有一个json叫做的字段settings.我们假设这个字段大致如下:

{
  color: 'red', 
  language: 'English', 
  subitems: 
    {
      item1: true, 
      item2: 43, 
      item3: ['foo', 'bar', 'baz']
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我这样做,User.select(:settings)我将获得每个用户的所有设置.但我想只为用户提供语言.我试过两个:

User.select("settings -> 'language'")
Run Code Online (Sandbox Code Playgroud)

User.select("settings ->> 'language'")
Run Code Online (Sandbox Code Playgroud)

但这只是返回空对象:

[#<User:0x007f381fa92208 id: nil>,
...]
Run Code Online (Sandbox Code Playgroud)

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

Dan*_*ani 8

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