我有一个属于医生的Casefile模型。除了所有“真正的”医生之外,还有几位通用医生:“自我治疗”,“未指定”和“已移除”(过去曾经有过真正的医生,但不再有医生)。我怀疑将来会有更多的通用值。
我从数据库中的特殊“医生”开始,从种子生成。通用医生只需要回复name, title, company, published?
方法。
这与一个人合作,两个人紧张,现在感觉完全被打破了。我想改变行为,无法弄清楚如何测试它,这是一个不好的迹象。创建所有用于测试的通用对象也很麻烦,包括通过验证所需Doctor属性的假值。
Null对象模式适用于一个通用对象。 “名称”方法可以返回“自我处理”,如Craig Ambrose所示。
当存在多个状态非常有限的通用对象时,我应该使用什么模式?
答案 0 :(得分:0)
在我看来,你可以在Casefile模型中添加一个名为treatment
的额外字段(可以设置为“自我处理”,“未指定”等)。
您可以添加验证以确保Casefile分配了医生或治疗:
validate :has_doctor_or_treatment, :on => :save
def has_doctor_or_treatment
(self.doctor.exists? || !treatment.blank?)
end
然后您可以使用治疗字段使用.where
找到Casefile:
Casefile.where(:treatment => "self-treated")
如果你愿意,你可以将治疗作为一个额外的模型,Casefile has_one
医生和has_one
治疗 - 但看起来你的需求太简单而无法保证。