この応答にはPostgres9.4が必要です。サンプルのデータ構造には次のものがあります。
2.1.1 :202 > r.column_data
=> {"data1"=>[1, 2, 3], "data2"=>"data2-3", "array"=>[{"hello"=>1}, {"hi"=>2}]}
残念ながら、配列内の要素の存在をチェックすることは、(私の知る限り)文字列値でのみ機能します。次のデータがあれば、問題なくクエリを実行できます。
{"data1"=>['1', '2', '3'], "data2"=>"data2-3"}
これをテストしてみましょう。注:ペイロードはjsonbです。 jsonフィールドとしては機能しません。
Dynamic.create(payload: {"data1"=>['1', '2', '3'], "data2"=>"data2-3"})
Dynamic.where("payload -> 'data1' ? '1'").first
=> #<Dynamic id: 8, payload: {"data1"=>["1", "2", "3"], "data2"=>"data2-3"}, created_at: "2014-12-24 02:30:31", updated_at: "2014-12-24 02:30:31">
詳細については、この記事>