Мне, вероятно, понадобится рефакторинг в два этапа, так как я все еще разрабатываю проект и изучаю прецеденты, поскольку я иду, чтобы почесать свой собственный зуд. У меня есть три модели: письма, звонки, электронные письма. У них есть некоторые сходства, но я ожидаю, что они также будут иметь несколько разных атрибутов, как вы можете сказать из их описания.Как я могу использовать одну вспомогательную работу на разных моделях?
В идеале я мог бы реорганизовать их как Events, с типом как буквы, звонки, электронные письма, но не знал, как расширить подклассы.
Моя насущная потребность заключается в следующем: у меня есть помощник, который проверяет на статус, был ли отправлен определенному контакту электронной почты (например):
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
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 @contact_call.status
end
end
Я хотел бы иметь возможность просто иметь один вспомогательный show_status, где я могу сказать show_status (контакт, вызов) или show_status (контакт, электронная почта), и он будет знать, искать ли объект @contact_c all или @contact_email.
Да, было бы проще, если бы это было просто @contact_event, но я хочу сделать небольшой рефакторинг, пока я запускаю программу, и это сделает возможность сделать историю для данного контакта намного проще ,
Спасибо!
ПРИМЕЧАНИЕ: В настоящее время у меня есть статус атрибута contact_email, contact_call и т. Д. Contact_email создается только при отправке сообщения электронной почты, поэтому нет контакта, если письмо не отправлено, и мне нужно знать, что статус «unsent» ...
Привет, это получает ошибку, как не следует: нет такой колонки: emails.email_id: SELECT * FROM "письма" WHERE ("электронная почта" .contact_id = 1 AND («emails». «email_id» = 2)) Идентификатор для писем будет emails.id Я считаю ... но не ясно, как настроить это? – Angela
Я удалил pluralize, и теперь я получаю это: undefined method '> = 'for {: conditions => {" email_id "=> 2}}: Hash Это выглядит как правильные параметры для: условий, но дон 't знать, что неопределенный метод> = is ... – Angela
Обновлен ответ, посмотрите. –