2010-07-11 47 views
0

我在Rails的一個簡單的消息系統,消息表的原始信息和MessageCopy表中的每個收件人的信息。如何使用find_all_by一個散列

消息包括作業ID,主題,正文和AUTHOR_ID。
MessageCopy包含recipient_id和message_id。

我試圖隔離一組特定的消息。我需要收件人查看所有發給收件人的message_copies,2.屬於任何帶有message.job_id = @ job.id的郵件。就像是?

@jobmessages = Message.find_all_by_job_id(job.id) 
@messages = MessageCopy.find_all_by_recipient_id_and_message_id(current_user.id, @jobmessages.id) 

當一個條件是像@jobmessages這樣的散列時,如何做find_all_by?

謝謝!

回答

1

假設你有以下關聯:

class User 
has_many :jobs 
end 

class Job 
belongs_to :user 
has_many :messages 
has_many :message_copies, :through => :messages 
end 

class Message 
belongs_to :user 
belongs_to :job 
has_many :message_copies 
end 

class MessageCopy 
belongs_to :message 
belongs_to :recipient, :class_name => "User" 
end 

你可以得到MessageCopy給予Job和當前用戶如下:

job.message_copies.find_all_by_recipient_id(current_user.id) 
0

我相信你可以使用下面的

@jobmessages = Message.find_all_by_job_id(job.id) 

@messages = MessageCopy.all(:conditions => 
    ["recipient_id = ? AND message_id IN (?)", 
    current_user.id, @jobmessages.map(&:id)]