如何在rails中定义关系以便模型可以具有不同类型的关联模型?

如何在rails中定义关系以便模型可以具有不同类型的关联模型?

问题描述:

我不知道正确的数据库术语来解释我在问什么,所以我会尽我所能解释它。如何在rails中定义关系以便模型可以具有不同类型的关联模型?

我有一个has_one invoicee的发票模型。

发票可以是内部部门或外部部门。

我可以与具有列其中任何一个感觉凌乱的invoicee表进行此项设置(它会留下很多零列)。

我可以成立一个internal_invoicee和external_invoicee表,并仅在需要时,这似乎更好,但后来我不得不管理2个不同的协会创建一个。

然后我可以设置在我的发票模型的方法invoicee返回内部或外部invoicee取决于哪一个存在,因此只有一个时候都存在管理业务逻辑。

第二个解决方案似乎是这样做的更好的方式,但它仍然感觉凌乱我。有没有内置的方式在Rails中做到这一点?这感觉就像一个多态协会,只是相反。

我从来没有看NoSQL数据库,但是这是诸如此类的事情,他们做的很好?

你会有更多的部门,而不仅仅是内部或外部?或者你需要级联更新到单独的部门表吗?

如果不是,则将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