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

时间:2012-07-18 07:06:56

标签: ruby-on-rails-3 associations model-associations

我不知道正确的数据库术语来解释我在问什么,所以我会尽力解释它。

我的发票模型是has_one invoicee。

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

我可以使用一个发票表来设置它,这个表中的列感觉很脏(它会留下很多空列)。

我可以设置一个internal_invoicee和external_invoicee表,只根据需要创建一个似乎更好的表,但我必须管理2个不同的关联。

然后我可以在我的发票模型中设置一个invoicee方法,该方法根据存在的内部或外部发票返回,并且管理业务逻辑,以便只存在一个。

这第二个解决方案似乎是更好的方法,但它仍然让我感到麻烦。在Rails中是否有内置的方法?感觉就像是反向的多态关联。

我从来没有看过NoSQL数据库,但这是他们做得好的事情吗?

1 个答案:

答案 0 :(得分:1)

你是否会拥有更多的部门,而不仅仅是内部或外部?或者您是否需要对单独的部门表进行级联更新?

如果没有,请将boolean department_type列添加到invoicee表。不需要任何关系。

如果是这样,请在您的invoicee模型中编写一个方法,以确定具有外键的部门类型。将department_id和invoice_id列添加到invoicee,并在invoicel上添加invoicee_id列。

在发票上使用has_one :departmenthas_many :invoices,在部门上使用has_many :invoices,在发票上使用belongs_to :invoicee

旁注:你能选择比发票更好的名字吗?这太令人困惑了发票!