/ / ruby​​-on-rails、postgresql、activerecord、jsonbの中のjsonbオブジェクトのPostgresフィルタリング

Ruby-on-rails、postgresql、activerecord、jsonbの中のjsonbオブジェクトのためのPostgresフィルタリング

モデルを持っていると言ってみましょう Neighborhood jsonb []フィールドを持つ familiesこれは、jsonオブジェクトを含む配列であり、どのようなタイプのキー値ペアでもそうです [{"name":"Smiths", "count":4}, {"name":"Miller","out_on_vacation":false}, {"name":"Bennet", "house_color":"red", "count": 4}]

私は、特定のオブジェクトを内部に持つNeighborhoodsのNeighborhoodsを見つけるためにactiverecordクエリを実行したい families アレイ。 だから私が Neighborhood.where({families: {count: 4})結果として、ファミリフィールドにキー値のペアを持つjsonbオブジェクトが含まれているNeighborhoodモデルが生成されます count: 4。私はたくさんの異なる質問を返すことはできませんが、エラーを返さずに仕事をするようなことはできません。希望の結果を得るためにActiverecordクエリを書く方法は?

編集: 私は次のように移行を実行しました:

def change
add_column :neighborhoods, :families, :jsonb, array: true, default: [], index: true
end

回答:

回答№1は0

私はあなたが次のようなことをすると信じています:

Neighborhood.where("families -> "count" ? 4")

この記事はあなたを助けるかもしれません: http://nandovieira.com/using-postgresql-and-jsonb-with-ruby-on-rails

編集:ちょうどあなたがjsonbの内部に配列を持っていることに気づいたので、これはおそらく "うまくいきませんでした。

編集2:これはRedditで答えられ、私のためにも働いた。自分自身の参考にしてここに答える。

Neighborhood.where %q(families @> "[{"count":?}]"), 4