views:

21

answers:

2

I have a simple messaging system in Rails with a Message table for the original information and a MessageCopy table for each recipient's information.

Message includes job_id, subject, body, and author_id.
MessageCopy includes recipient_id and message_id.

I am trying to isolate a specific set of messages. I need the recipient to see all message_copies that are 1. addressed to the recipient, and 2. belong to any message with message.job_id = @job.id. Something like?

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

How can you do a find_all_by when one of the criteria is a hash like @jobmessages?

Thanks!

A: 

I believe you can use the following

@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)]
j.
+1  A: 

Assuming you have the following associations:

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

You can get the MessageCopy given a Job and the current user as follows:

job.message_copies.find_all_by_recipient_id(current_user.id)
KandadaBoggu