关于组合多态关联和单表继承的示例和建议

时间:2011-05-05 09:56:58

标签: ruby-on-rails ruby ruby-on-rails-3 polymorphism single-table-inheritance

我正在使用Ruby on Rails 3,我想知道一个真实世界的例子(或更多)和一些建议,当我应该\ \必须使用实现here at the Polymorphic Association paragraph多态关联单表继承的组合。

2 个答案:

答案 0 :(得分:1)

根据我的经验,多态关系=好,STI = PainInTheArse。

我从来没有见过一个不会变成令人困惑的混乱的STI例子。

如果你有不同的东西与一个或多个其他类具有相同的关系,那么使用他们自己的表将它们保存为不同的东西。例如,附加文档:您可能希望将文档附加到许多不同类型的事物上。为此使用多态关系,例如称为“可记录”。

Document
  belongs_to :documentable, :polymorphic => true
  #expects a documentable_id field (integer) and a documentable_type field (string)

User
  has_many :documents, :as => :documentable

Company 
  has_many :documents, :as => :documentable

答案 1 :(得分:0)

当您需要在同一个对象/表中包含所有内容时,请使用STI。与其他对象,属性和验证的关系可以根据对象的状态而改变。

当您的对象与未指定类型的另一个对象相关时,请使用多态关系。参见#max-williams的例子