我有一个消息传递系统,MessageUser可以将消息发送到多个MessageUser。因此,MessageUser与Messages:
有这些关系has_many :sent_messages, foreign_key: :from_user_id, class_name: 'Message'
has_many :message_recipients, foreign_key: :to_user_id
has_many :received_messages, class_name: 'Message', through: :message_recipients, source: :message
我真的希望有has_many :messages
允许MessageUser获取与所有消息的关系,无论他/她是发送者还是接收者。我需要将结果保存为ActiveRecord对象,这样我就不必将其全部加载到内存中,并且可以将排序,过滤和分页委托给数据库。
可以这样做吗?
(作为参考,MessageRecipient只是一个与收件人保持这种关系的类。它只有一个message_id和一个to_user_id。)
答案 0 :(得分:0)
好吧,SQL可能不是我最强的套装,但让我们试一试。
Message.joins(:message_recipients)
.where{ message_recipients.to_user_id == user_id | from_user_id == user_id }
使用squeel语法来避免SQL。可能不完整,但这样的事情可以奏效。