все: Я также открыт для простого рефакторинга того, что я считаю довольно повторяющимся, но чтобы дать общее представление о том, как это работает ...
У меня есть для каждого контакта кампания, в которой есть множество моделей трех типов: электронная почта, звонок и письмо.
Когда электронное письмо (звонок или письмо) было выполнено для определенного контакта, у меня есть Contact_Email (_or_Call_or_Letter), который принадлежит как контакту, так и модели (Email_or_Call_or_Letter).
Например, каждая пара Contact_Email имеет атрибут: date_sent. То же самое происходит с каждым Contact_Call и Contact_Letter.
Как найти самые свежие из них?
Вот код, который я написал, который может найти последнюю электронную почту и мои находки, повторно набрав аналогичный код для Call и Letter, но затем застрял на том, как сделать .max для всех из них:
def last_email(contact)
#get campaign the contact belongs to
@campaign = Campaign.find_by_id(contact.campaign_id)
@last_email = ContactEmail.find(:last,
:conditions => "contact_id = #{contact.id}",
:order => "date_sent DESC")
@last_call = ContactCall.find(:last,
:conditions => "contact_id = #{contact.id}",
:order => "date_sent DESC")
@last_letter = ContactLetter.find(:last,
:conditions => "contact_id = #{contact.id}",
:order => "date_sent DESC")
# how do I get the latest of all of these to display?
@email_template = Email.find_by_id(@last_email.email_id)
if @last_email.nil?
return "no email sent"
else
return @last_email.date_sent.to_s(:long) + link_to('email was sent', @email_template)
end
end
Вопрос 1. С тем, что у меня есть, как я могу эффективно найти @last_event, учитывая, что я могу найти последнее электронное письмо, последний звонок и последнее письмо для каждого контакта?
Вопрос 2. Как я могу удалить повторяющийся код, который мне приходится писать для каждой модели?