2013-03-09 67 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