将两个has_many的结果合并到一个ActiveRecord对象中

时间:2015-07-11 09:33:56

标签: ruby-on-rails activerecord

我有一个消息传递系统,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。)

1 个答案:

答案 0 :(得分:0)

好吧,SQL可能不是我最强的套装,但让我们试一试。

Message.joins(:message_recipients)
.where{ message_recipients.to_user_id == user_id | from_user_id == user_id }

使用squeel语法来避免SQL。可能不完整,但这样的事情可以奏效。