【问题标题】:RoR: Should I use belongs_to, :polymorphic in this scenario?RoR:在这种情况下我应该使用belongs_to, :polymorphic 吗?
【发布时间】:2010-07-15 18:39:29
【问题描述】:

我正在开展一个项目,其中许多 ActiveRecord 模型都可以与之关联对话。用户可以讨论网站的几乎所有方面。关于如何实现,我有两个想法。

1) 在资产中使用belongs_to,而不是对话——对话将完全不知道它的资产

class Product< ActiveRecord::Base
  belongs_to :conversation
end

class PurchaseOrder < ActiveRecord::Base
  belongs_to :conversation
end

2) 在对话中使用belongs_to, :polymorphic => true

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

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

【问题讨论】:

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


    【解决方案1】:

    我认为这取决于关系中的一个模型需要了解另一个模型(如果有的话)。在我看来,从您的描述来看,第二种方法更适合这种情况。为什么?

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

    这是一个非常常见的问题,也总是让我停下来思考一下。这并不总是显而易见的。有一篇很好的文章考虑这个问题here

    【讨论】:

    • 很好的答案。感谢您的洞察力。
    猜你喜欢
    • 2011-01-17
    • 2022-07-22
    • 2013-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-15
    • 2010-09-05
    • 2017-05-09
    相关资源
    最近更新 更多