假设我的Message
模型具有sender
和receiver
属性。获取两个用户之间交换的所有消息的rails方式是什么?我写了一些范围和
scope :some_scope, lambda { |sender = nil, receiver = nil| where({:sender_id => sender, :receiver_id => receiver})}
然后我连接Message.some_scope(some_receiver,some_sender)
和Message.some_scope(some_sender,some_receiver)
,但我认为这不是最佳做法(顺便说一句,我没有找到一种简单的方法在union
语句{ {1}})
答案 0 :(得分:3)
在这种情况下最好使用类方法,因为它既复杂又需要参数。此外,您可以只or
一起关注两个条件,而不是使用联合。
def self.conversation(id1, id2)
id1_to_id2 = where(sender_id: id1, receiver_id: id2).where_values.reduce(:and)
id2_to_id1 = where(sender_id: id2, receiver_id: id1).where_values.reduce(:and)
where(id1_to_id2.or(id2_to_id1))
end
现在您可以执行以下操作:
Message.conversation(user1.id, user2.id)
这将为您提供user1
和user2
之间的所有消息。