我尝试创建以下范围:
scope :involving, -> (user) do
where("conversations.sender_id =? OR conversations.recipient_id =?", user.id, user.id)
end
但我明白了:
错误的参数数量(3对1)
我做错了什么。
提前致谢。
答案 0 :(得分:0)
Mongoid的where
并不了解像a = ? OR b = ?
这样的SQL代码段,它只需要一个哈希参数。因此你的" 3为1"错误。
您希望使用any_of
来构建:$or
查询:
any_of(
{ :sender_id => user.id },
{ :recipient_id => user.id }
)
请注意多个any_of
组合在一起,所以:
M.any_of(a, b).any_of(c, d)
说:
a OR b OR c OR d # any_of(a, b, c, d)
而不是
(a OR b) AND (c OR d)
正如您所料。
如果您期望每个组合OR条件,那么您可能希望将sender_id
和recipient_id
合并到一个数组字段中:
field :involved_ids, :type => Array
这样你就可以说:
where(:involved_ids => user.id)
并避免OR问题。您当然还有单独的sender_id
和recipient_id
字段,您只需复制数据以更好地适应您的查询。对MongoDB来说,非常规化您的数据以适合您的查询。