2012-07-18 65 views
1

我不知道正確的數據庫術語來解釋我在問什麼,所以我會盡我所能解釋它。如何在rails中定義關係以便模型可以具有不同類型的關聯模型?

我有一個has_one invoicee的發票模型。

發票可以是內部部門或外部部門。

我可以與具有列其中任何一個感覺凌亂的invoicee表進行此項設置(它會留下很多零列)。

我可以成立一個internal_invoicee和external_invoicee表,並僅在需要時,這似乎更好,但後來我不得不管理2個不同的協會創建一個。

然後我可以設置在我的發票模型的方法invoicee返回內部或外部invoicee取決於哪一個存在,因此只有一個時候都存在管理業務邏輯。

第二個解決方案似乎是這樣做的更好的方式,但它仍然感覺凌亂我。有沒有內置的方式在Rails中做到這一點?這感覺就像一個多態協會,只是相反。

我從來沒有看NoSQL數據庫,但是這是諸如此類的事情,他們做的很好?

回答

1

你會有更多的部門,而不僅僅是內部或外部?或者你需要級聯更新到單獨的部門表嗎?

如果不是,則將boolean department_type列添加到invoicee表中。不需要任何關係。

如果是這樣,在你的invoicee模型寫一個方法來確定部門與類型的外鍵。將department_id和invoice_id列添加到invoicee和發票上的invoicee_id列。

在發票上使用has_one :departmenthas_many :invoices,在部門上使用has_many :invoices,在發票上使用belongs_to :invoicee

附註:您可以選擇比invoicee更好的名字嗎?這太容易混淆發票了!

+1

關於invoicee的好處。這聽起來比它讀得更好。 – brad 2012-07-18 11:00:36