SQL,rails:检查我的记录中的JSONB列是否有键值对
问题描述:
不,这只是一个不是约会应用程序的例子。我的应用程序不同,也更复杂。SQL,rails:检查我的记录中的JSONB列是否有键值对
我有一个rails应用程序。我有2个桌子和宠物。众议院有许多宠物。我的宠物表有一个名为pet_description一个JSONB列包含宠物类型和性别的键值对,像这样:
{
"dog"=>"male",
"cat"=>"female",
"parrot"=>"male"
}
而对于这个迁移文件是:
class AddPetDescriptionToPets < ActiveRecord::Migration
def change
add_column :pets, :pet_description, :jsonb, default: {}
add_index :pets, :pet_description, using: :gin
end
end
在我的房子模型,我有一个执行SQL查询的查询。它适用于如果我做这个查询找到所有有宠物的房屋。
self.where("EXISTS (SELECT null FROM pets WHERE pets.house_id = houses.id)")
但是,如果我想查询所有具有特定宠物类型和性别的房屋,那么我似乎无法得到此查询工作。我是JSONB的新手,我在下面的查询中做了什么错误,请帮忙!!!!
self.where("EXISTS (SELECT null FROM pets WHERE pets.house_id = houses.id AND pets.pet_description @> '{'dog' : 'male'}'::jsonb)")
谢谢! 格雷格
答
您可以尝试使用不同的报价符号:
self.where("EXISTS (
SELECT null
FROM pets
WHERE pets.house_id = houses.id
AND pets.pet_description @> '{\"dog\" : \"male\"}'::jsonb)")
还是让Rails的照顾约PARAMS格式:
self.where("EXISTS (
SELECT null
FROM pets
WHERE pets.house_id = houses.id
AND pets.pet_description @> ?)", {dog: 'male'}.to_json)
辉煌!谢谢伊利亚!你的答案完美无缺,你是明星! – GregF