我有一个这样的模型: Order(id:integer,user_id:integer,target_id:integer,content:string,created_at:datetime,updated_at:datetime)
它属于User。用户可以互相订购,如:
=>唯一记录应该是A - > B,那么如何将Order过滤到唯一记录?
答案 0 :(得分:0)
好的,假设你有用户A和B,你应该能够做到这一点:
Order.where(user: A, target: B)
...假设您已经定义了您的关联,否则:
Order.where(user_id: A.id, target_id: B.id)
编辑:刚刚看到你的评论。您可以将.first
添加到上述任一查询中,只是为了获得第一个订单。
另一个编辑:据我所知,如果A和B(或B和A)之间有一个或多个订单,你想抓住其中一个订单,而你却不在乎哪一个。你可以这样做:
(Order.where(user: A, target: B) + Order.where(user: B, target: A)).first
如果存在,则会为您提供记录,如果不存在,则为nil
。原始SQL会更有效:
Order.where("user_id = ? AND target_id = ? OR user_id = ? AND target_id = ?", A.id, B.id, B.id, A.id).first
...但不太可读,请务必测试。祝你好运!