如何在Rails中连接两个ActiveRecord查询

时间:2013-03-09 21:48:42

标签: ruby-on-rails ruby-on-rails-3 activerecord

我有一个简单的应用程序,其中包含用户模型,角色模型,带收件人的邮件模型。 用户通过角色拥有许多消息 并且角色通过收件人发送了许多邮件,用户也通过收件人发送了许多邮件。

收件人模型有user_id,role_id和message_id

现在我想在一个查询中显示用户的所有消息,包括他的角色消息和他的个人消息。我怎样才能做到这一点。

 role model

 has_many :recipients
 has_many :received_messages, :class_name => 'Message', :order => 'created_at desc', through: :recipients

 user model
 has_many :roles
 has_many :received_messages, :class_name => 'Message', :order => 'created_at desc', through: :roles, :uniq => true
 has_many :recipients
 has_many :private_messages, :class_name => 'Message', :order => 'created_at desc', through: :recipients

 message model
 has_many :recipients
 has_many :roles, :through => :recipients
 has_many :users, :through => :recipients

有了所有这些,我将如何获取用户消息他的角色消息和他的私人消息

例如

def all_messages
  @all_messages = current_user.#all messages scope here#
end

1 个答案:

答案 0 :(得分:1)

获取所有消息的一种方法是将received_messages数组与all_messages方法中的private_messages数组相结合。这将返回所有用户消息的数组。

def all_messages
  (current_user.received_messages + current_user.private_messages).uniq
end