0

私は、stored_accessor "list"(data: {"list"=>[{"key"=>"key1", "value"=>"value1"}]}のように保存されています)というイベントというモデルを持っています。jsonbと配列の組み合わせをpostgresでrails4 stored_accessorで検索する

私は私が最初のケースで

1) {'key'=> 'key1', 'value'=> 'value1'} 
2) ["key"=>"key1", "value"=>"value1"}, {"key"=>"key2", "value"=>"value2"}] 

などのserach paramsはを持って

#<Event id: "1", title: "HHHH", description: nil, data: {"list"=>[{"key"=>"key1", "value"=>"value1"}, {"key"=>"key2", "value"=>"value2"}]}, created_at: "2017-04-14 21:06:22", updated_at: "2017-04-20 10:36:08"> 
#<Event id: "2", title: "HHHH", description: nil, data: {"list"=>[{"key"=>"key1", "value"=>"value1"}]}, created_at: "2017-04-14 21:06:22", updated_at: "2017-04-20 10:36:08"> 
#<Event id: "3", title: "HHHH", description: nil, data: {"list"=>[{"key"=>"key11", "value"=>"value11"}, {"key"=>"key12", "value"=>"value12"}]}, created_at: "2017-04-14 21:07:22", updated_at: "2017-04-20 10:37:08"> 
#<Event id: "4", title: "HHHH", description: nil, data: {"list"=>[{"key"=>"key111", "value"=>"value111"}, {"key"=>"key112", "value"=>"value112"}]}, created_at: "2017-04-14 21:08:22", updated_at: "2017-04-20 10:38:08"> 

oを検索クエリを作成する必要があり、それはEvent ID 12を返す必要があります。

第2のケースでは、Event id 1を返す必要があります。 (戻り値1 and 2の両方が受け入れられる場合はイベント)。

jsonと配列の組み合わせではわかりません。 助けてください。

+0

['jsonb'](https://www.postgresql.org/docs/9.5/static/functions-json.html)のドキュメントを読んだことがありますか?何か試しましたか? –

+0

はい私は知っていますが、私の属性は 'data:{" list "=" [key "=>" key1 "、" value "=>" value1 "}、{" key "=> key2 "、" value "=>" value2 "}]}'、data - > list - > {key、value}(そしてハッシュをチェックする) – Vinay

答えて

0

PostgreSQL jsonbの演算子@>を使用して実行できます。また、検索パラメータの完全パスを記述する必要があります。{'list' => [{'key'=> 'key1', 'value'=> 'value1'}]}。このコードを試してください:

to_contain1 = {'list' => [{'key'=> 'key1', 'value'=> 'value1'}]} 
to_contain2 = {'list' => [{'key'=> 'key2', 'value'=> 'value2'}]} 

Event. 
    where("data @> ?", to_contain1.to_json}) 
# returns events 1 & 2 

Event. 
    where("data @> ?", to_contain1.to_json). 
    where("data @> ?", to_contain2.to_json) 
# returns event 1 
関連する問題