在ActiveRecord关联中表示多个Null / Generic对象?

时间:2011-11-20 21:47:59

标签: ruby-on-rails activerecord belongs-to

我有一个属于医生的Casefile模型。除了所有“真正的”医生之外,还有几位通用医生:“自我治疗”,“未指定”和“已移除”(过去曾经有过真正的医生,但不再有医生)。我怀疑将来会有更多的通用值。

我从数据库中的特殊“医生”开始,从种子生成。通用医生只需要回复name, title, company, published?方法。

这与一个人合作,两个人紧张,现在感觉完全被打破了。我想改变行为,无法弄清楚如何测试它,这是一个不好的迹象。创建所有用于测试的通用对象也很麻烦,包括通过验证所需Doctor属性的假值。

Null对象模式适用于一个通用对象。 “名称”方法可以返回“自我处理”,如Craig Ambrose所示。

当存在多个状态非常有限的通用对象时,我应该使用什么模式?

1 个答案:

答案 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治疗 - 但看起来你的需求太简单而无法保证。