在Message模型中写一个scope,使用SQL的自连接语法查找符合条件的记录,代码如下:
class Message < ApplicationRecord
scope :sent_between_users, lambda { |user1_id, user2_id|
where("(sender_id = :user1_id AND receiver_id = :user2_id)
OR (sender_id = :user2_id AND receiver_id = :user1_id)",
user1_id: user1_id, user2_id: user2_id)
}
end
可以在任何需要使用这个scope的地方调用它来获取所有符合条件的记录,例如:
user1 = User.find(1)
user2 = User.find(2)
messages = Message.sent_between_users(user1.id, user2.id)
这将返回user1和user2互相发送的所有消息。