2010-07-11 4 views
0

J'ai un système de messagerie simple dans Rails avec une table de message pour les informations d'origine et une table MessageCopy pour les informations de chaque destinataire.Comment utiliser find_all_by sur un hachage

Le message comprend job_id, subject, body et author_id.
MessageCopy inclut recipient_id et message_id. J'essaie d'isoler un ensemble spécifique de messages. J'ai besoin du destinataire pour voir toutes les copies de message qui sont 1. adressées au destinataire, et 2. appartiennent à n'importe quel message avec message.job_id = @ job.id. Quelque chose comme?

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

Comment pouvez-vous faire un find_all_by lorsque l'un des critères est un hachage comme @jobmessages?

Merci!

Répondre

1

En supposant que vous avez les associations suivantes:

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 

Vous pouvez obtenir le MessageCopy donné un Job et l'utilisateur actuel comme suit:

job.message_copies.find_all_by_recipient_id(current_user.id) 
0

Je crois que vous pouvez utiliser les éléments suivants

@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)] 
Questions connexes