Как использовать find_all_by для хеша - PullRequest
0 голосов
/ 11 июля 2010

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

Сообщение включает в себя job_id, subject, body и author_id.
MessageCopy включает идентификатор получателя и идентификатор сообщения.

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

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

Спасибо!

Ответы [ 2 ]

1 голос
/ 12 июля 2010

Если у вас есть следующие ассоциации:

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 голосов
/ 11 июля 2010

Я полагаю, вы можете использовать следующее

@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)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...