我开始遇到一些困难让这更干嘛:
它的主旨是:
我有一堆模型,contact_email,contact_call,contact_letter等。
这些必不可少的方法让我能够实例化与联系人的特定实例/记录相匹配的电子邮件模型实例(将其视为模板)。
因为他们引用的模型不同,我需要一种方法让控制器引用正确的模型。
但这变得复杂了。我玩不同的方式使用'发送'和部分Ruby来识别相关的类,所以我不需要明确说明它,但没有运气。
因此 - 非常不干净......帮助!
答案 0 :(得分:0)
def show_contact_status(contact, method, contact_class)
if @contact_method = contact_class.for_contact(contact, method).first
@contact_method.formatted_status_message
else
"no status"
end
end
然后在您的模型中,您将添加一个命名范围:
named_scope :for_contact, lambda {|contact, method|
{:conditions => {:contact_id => contact.id, :email_id => method.id}}
}
然后在ContactEmail模型中使用formatted_status_message
方法:
def formatted_status_message
"#{self.status.to_s} (#{self.date_sent.to_s(:long)}"
end
在你的其他模特中:
def formatted_status_message
"sent #{self.date_sent_to_s(:long)}"
end
您可以调用电子邮件的方法:
show_contact_status(contact, method, ContactEmail)
我试图尽可能多地移动到模型层并利用它,而不是在这种情况下进行元编程。