Конечной целью является создание помощника, найденного в конце, называемого show_status (контакт, событие).Как я могу сделать этот код (помощник) DRY в Rails, где я звоню в похожие модели?
Событие может быть любым объектом, электронной почтой, письмом и т. Д. Сочетание шаблона электронной почты, отправленного контакту, является конкретной записью ContactEmail. Поскольку у каждого события есть другая соответствующая модель, мне нужно сделать .find, у меня есть дублирование. Должен быть лучший способ!
def show_email_status(contact, email)
@contact_email = ContactEmail.find(:first, :conditions => {:contact_id => contact.id, :email_id => email.id })
if ! @contact_email.nil?
return @contact_email.status.to_s + " (" + @contact_email.date_sent.to_s + ")"
else
return "no status"
end
end
def show_call_status(contact, call)
@contact_call = ContactCall.find(:first, :conditions => {:contact_id => contact.id,
:call_id => call.id })
if ! @contact_call.nil?
return "sent " + @contact_call.date_sent.to_s(:long)
else
return "no status"
end
end
def show_letter_status(contact, letter)
@contact_letter = ContactLetter.find(:first, :conditions => {:contact_id => contact.id,
:letter_id => letter.id })
if ! @contact_letter.nil?
return "sent " + @contact_letter.date_sent.to_s(:long)
else
return "no status"
end
end
def show_voicemail_status(contact, voicemail)
@contact_event = ContactEvent.find(:first, :conditions => {:contact_id => contact.id,
:event_id => voicemail.id,
:type => "voicemail"})
if ! @contact_event.nil?
return "sent " + @contact_event.date_sent.to_s(:long)
else
return "no status"
end
end
def show_postalcard_status(contact, postalcard)
@contact_postalcard = ContactPostalcard.find(:first, :conditions => {:contact_id => contact.id,
:postalcard_id => postalcard.id })
if ! @contact_postalcard.nil?
return "sent " + @contact_postalcard.date_sent.to_s(:long)
else
return "no status"
end
end
def show_status(contact, call_or_email_or_letter_or_voicemail)
model_name = call_or_email_or_letter_or_voicemail.class.name.tableize.singularize
send "show_#{model_name}_status", contact, call_or_email_or_letter_or_voicemail
end
ах, это интересно ... Я пытался подумать о том, как это сделать, но вы передаете конкретный актив ... это может сделать это ... позвольте мне поиграть с ним .... – Angela
Этот второй метод. ... где он ищет подходящий contact_id? Похоже, что он просматривает таблицу contact_emails (например) и просто выполняет поиск по соответствующему email.id ... но как насчет contact_id? – Angela
Это подразумевается, поскольку мы используем поиск через ассоциации. Если вы проверите файл журнала, вы увидите, что SQL-код имеет контакт_ид. –