User
というモデルがあり、フィールドにというjson
というフィールドがあるとします。のは、このフィールドは、おおよそ次のようになりますと仮定しましょう:Postgresに保存されているjsonの一部のみをActiveRecordで保存する方法
{
color: 'red',
language: 'English',
subitems:
{
item1: true,
item2: 43,
item3: ['foo', 'bar', 'baz']
}
}
私はUser.select(:settings)
をすれば、私は、各ユーザーのすべての設定を取得します。しかし、私はユーザーのための言語だけを取得したい。
User.select("settings -> 'language'")
と
User.select("settings ->> 'language'")
が、これは単に空のオブジェクトを返します:私は両方を試してみました
[#<User:0x007f381fa92208 id: nil>,
...]
は、すべての可能で、このですか?はいの場合 - ちょうどjson
を使用して行うことができますか、jsonb
に切り替える必要がありますか?
*空のオブジェクト* - 確かに?結果に '.map(&:attributes)'を実行してみてください。 –
あなたは正しいです。 'attributes'はこの' {"id" => nil、 "?column?" => "English"} 'を返します。私を混乱させたのは、普通の(jsonではない)属性を選択するとオブジェクトが通常次のようになるという事実です: '#。しかし、明らかにjsonの選択されたデータはそのようには機能しません。 –
**既知の**列のみを出力する方法で定義された '#to_s'です。 ** 'select'のカスタム**カラムはテーブルの中にあるとは知られていないので、'#to_s'では表示されませんが、[関係なくマップされます](http://stackoverflow.com/questions/34701667)/where-do-we-declare-attributes-of-a-rails-model/34705079#34705079)。 –