2011-11-20 39 views
1

我有一個屬於醫生的Casefile模型。除了所有「真正的」醫生之外,還有幾位通用醫生:「自我治療」,「未指定」和「移除」(曾經有一位真正的醫生,但不再這樣做)。我懷疑未來會有更通用的價值。在ActiveRecord關聯中表示多個Null/Generic對象?

我從數據庫中的特殊「醫生」開始,從種子生成。通用醫生只需要迴應name, title, company, published?方法。

這一起工作,與兩個緊張,現在感覺完全破碎。我想改變行爲,不知道如何測試它,這是一個不好的跡象。創建所有用於測試的通用對象也很麻煩,包括通過驗證所需的博士屬性的假值。

空對象模式適用於一個通用對象。 「名稱」方法可以返回「自我治療」,如Craig Ambrose所示。

當有多個通用對象的狀態非常有限時,應該使用什麼模式?

回答

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治療 - 但它看起來像你的需求太簡單,不能保證。