我正在使用Postgres作为我的数据库,我的Auction模型中有一列作为jsonb列。我想创建一个查询,搜索Auction的json列,以查看任何Auction实例的json列中是否存在用户的名称或电子邮件。
现在我有@auctions = Auction.where('invitees @> ?', {current_user.name.downcase => current_user.email.downcase}.to_json)
,但这只能带回我想知道姓名或电子邮件是否存在的确切key => value
匹配。
答案 0 :(得分:2)
您正在使用outletsCollection.forEach({ $0.isHidden = true })
运算符。它的描述是这样的:
“左侧JSON值是否包含正确的JSON路径/值条目 在顶层?“
如果您希望在密钥(您的案例中的名称)匹配时返回一行,则可能需要@>
运算符。
仅在JSON列(see this answer for more details)中搜索值不是一种好方法,但您可以检查密钥是否单独存在,还是存在密钥和值匹配。< / p>
使用与使用非JSON列相同的ActiveRecord方法和链接,即?
和where
:
where(…).or(where(…))
答案 1 :(得分:0)
这只是一个临时补丁,直到我添加Invite
模型,但将被邀请者列转换为文本我可以搜索列。像这样
SELECT * FROM auctions
WHERE data::text LIKE "%#{string I'm searching for}%"
所以,AR:
Auction.where('data::text LIKE ?', "%#{string I'm searching for}%")