【发布时间】:2011-01-18 11:11:53
【问题描述】:
我一直发现有关多态关联的文档不清楚。比如来自The Rails Guide:
使用多态关联,一个模型可以在一个关联上属于多个其他模型。
我发现在很多情况下,模型都属于多个模型。例如,如果我有一个 Company 模型、一个 Invoice 模型和一个 AccountPayable 模型,我发现我可以这样做:
class Company < ActiveRecord::Base
has_many :invoices
has_many :account_payables
end
# not shown: Invoice and AccountPayable classes
# with corresponding belongs_to associations
这似乎总是很好。虽然正如我所说,当我阅读多态的帮助时,我觉得我应该将它用于上述情况。
但是我认为那是不对的。如果我上面的简单示例是多态的,那么这意味着一个模型只能被另一个模型“使用”,除非你去多态。这感觉过于严格。此外,多态接口名称示例往往是动词(例如“commentable”等)。如何将上面的示例变成动词?适合吗?
也许文档试图告诉我,当模型实例只能属于关联实体之一而不再属于其他实体时。例如,如果一家公司只能属于 Invoices 或 AP(不能同时属于两者)。如果是这种情况,在我看来,它更像是单表继承,而不是普通的旧 has_many/belongs_to。使用 STI,我可以拥有 class Creditor < Company... 和 class Debtor < Company... 并将它们分别与 Invoices 和 AccountPayables 相关联。在我上面的例子中,可以想象给定的公司是我开具发票并且欠钱的人(即 AccountPayable)
感谢您的澄清......
【问题讨论】:
标签: ruby-on-rails activerecord