2013-03-09 40 views
1

我有一个简单的应用程序与用户模型,角色模型,与收件人的消息模型。 用户通过角色 发送了很多消息,角色通过收件人发送了很多消息,并且用户还通过收件人发送了很多消息。如何连接Rails中的两个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 
+0

你有has_many:用户模型的角色。这意味着角色模型右边有一个belongs_to:用户? – jvnill 2013-03-10 01:09:36

回答

2

的一种方式将all_messages方法中的received_messages数组与private_messages数组组合在一起。这将返回所有用户消息的数组。

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

不错。谢谢,我从来没有新的concat方法 – Uchenna 2013-03-13 09:05:18

+0

我试过了,我得到了以下错误'不能修改关联'用户#received_messages',因为它通过多个其他协会。' – Uchenna 2013-03-16 18:40:17

+0

拍摄,我忽略了这一点。是的,这是有道理的,它不会让你修改它通过ActiveRecord关联创建的数组bc。我刚刚为你更新了我的答案。 – 2013-03-16 18:47:01