RoR:我应该在这种情况下使用belongs_to,:polymorphic吗?

时间:2010-07-15 18:39:30

标签: ruby-on-rails activerecord polymorphic-associations has-one

我正在开发一个项目,其中许多ActiveRecord模型可以与之关联。用户可以讨论网站的每个方面。关于如何实施这个问题,我有两个想法。

1)在资产中使用belongs_to,而不是对话 - 会话将完全不知道其资产

class Product< ActiveRecord::Base
  belongs_to :conversation
end

class PurchaseOrder < ActiveRecord::Base
  belongs_to :conversation
end

2)使用belongs_to,:polymorphic =&gt;在对话中为真

class Conversation < ActiveRecord::Base
  belongs_to :asset, :polymorphic => true
end

class Product < ActiveRecord::Base
  has_one :conversation, :as => :asset
end

class PurchaseOrder < ActiveRecord::Base
  has_one :conversation, :as => :asset
end

建立这种关系的正确方法是什么?如果我要陈述这种关系,我会说“产品/采购订单可能有一次对话”。

1 个答案:

答案 0 :(得分:0)

我认为这取决于关系中的一个模型需要知道的另一个模型。在我的描述中,对我来说,第二种方法在这种情况下更合适。为什么呢?

  • ProductPurchaseOrder模型是自我约束的实体,因为它们可以与关于它们的对话分开存在。因此,您可能不希望外键污染这些模型以进行对话。在这个意义上,这种关系应该是不引人注目的。
  • Conversation对与其关联的实体具有逻辑依赖性,因此它具有asset_id(和asset_type)外键,这可能是合理的

这是一个非常常见的问题,总是让我停下来思考一下。这并不总是显而易见的。考虑到问题here

,有一篇很好的文章