假设我有一个模型Neighborhood
,它有一个jsonb []字段families
,这是一个包含json对象的数组,其中任何类型的键值配对都是这样的[{"name":"Smiths", "count":4}, {"name":"Miller","out_on_vacation":false}, {"name":"Bennet", "house_color":"red", "count": 4}]
我想做一个activerecord查询来查找在families
数组中包含某些对象的邻域的邻域。
因此,如果我执行Neighborhood.where({families: {count: 4})
之类的操作,结果将是任何邻域模型,其族字段包含一个jsonb对象,其键值配对为count: 4
。我玩了很多不同的查询,但似乎无法让任何一个查询工作而不会收到错误。我如何编写Activerecord查询以获得所需的结果?
修改 我像这样进行了迁移:
def change
add_column :neighborhoods, :families, :jsonb, array: true, default: [], index: true
end
答案 0 :(得分: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