一些联合查询的sql语句 - rails

时间:2014-03-02 21:21:11

标签: sql ruby-on-rails ruby associations rails-activerecord

假设我的Message模型具有senderreceiver属性。获取两个用户之间交换的所有消息的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}})

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)

这将为您提供user1user2之间的所有消息。