2010-07-11 2 views
0

У меня есть простая система обмена сообщениями в Rails с таблицей сообщений для исходной информации и таблицей MessageCopy для каждой информации получателя.Как использовать find_all_by на хеше

Сообщение содержит job_id, subject, body и author_id.
MessageCopy включает recipient_id и message_id.

Я пытаюсь изолировать определенный набор сообщений. Мне нужен получатель, чтобы увидеть все сообщения_копии, которые 1. адресованы получателю, и 2. принадлежат к любому сообщению с сообщением.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) 

Как вы можете сделать find_all_by, когда один из критериев является хэш как @jobmessages?

Спасибо!

ответ

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)] 
Смежные вопросы