请参见以下示例:
Product 1: sender_uid = 1, receiver_uid = 2
Product 2: sender_uid = 2, receiver_uid = 1
Product 3: sender_uid = 1, receiver_uid = 2
params[:user_id] = 1
在第一个查询中,您得到的是OR等于的所有产品。即产品 1、2 和 3。sender_uid
receiver_uid
1
在第二个查询中,您查询的sender_uid
是所有产品1
。那是产品 1 和产品 3,然后(根据该标准)具有receiver_id
= 1 的产品。产品 1 和产品 2 都没有带有 uid 1 的接收器。所以,这就是为什么你什么也得不到。您在第二个查询中执行的操作类似于:
Product.where(sender_uid: params[:user_id]).where(receiver_uid: params[:user_id])
更新:
回复评论:
Product.or({ product_id: 1 }, { product_id: 2, sender_uid: 2 })
如您所见,该or
方法接收条件的哈希值。每一个都像一个where
查询。