【问题标题】:HABTM Polymorphic RelationshipHABTM 多态关系
【发布时间】:2011-10-21 08:04:26
【问题描述】:

我对 Rails 很陌生,我正在尝试建立多态 HABTM 关系。问题是我要关联三个模型。

第一个是事件模型,然后是两种参与者:用户和联系人。

我想做的是能够以与会者的身份将用户和联系人联系起来。所以,我现在在我的代码中拥有的是:

事件模型

has_and_belongs_to_many :attendees, :polymorphic => true

用户模型

has_and_belongs_to_many :events, :as => :attendees

联系模特

has_and_belongs_to_may :events, :as => :attendees
  1. HABTM 表迁移需要如何进行?我有点困惑,我没有找到任何帮助。
  2. 它会起作用吗?

【问题讨论】:

    标签: ruby-on-rails-3 activerecord polymorphism relationship has-many-polymorphs


    【解决方案1】:

    不,你不能那样做,不存在多态 has_and_belongs_to_many 关联。

    您可以做的是创建一个中间模型。大概是这样的:

    class Subscription < ActiveRecord::Base
      belongs_to :attendee, :polymorphic => true
      belongs_to :event
    end
    
    class Event < ActiveRecord::Base
      has_many :subscriptions
    end
    
    class User < ActiveRecord::Base
      has_many :subscriptions, :as => :attendee
      has_many :events, :through => :subscriptions
    end
    
    class Contact < ActiveRecord::Base
      has_many :subscriptions, :as => :attendee
      has_many :events, :through => :subscriptions
    end
    

    这样,订阅模型的行为类似于 N:N 关系中的链接表,但允许您对事件具有多态行为。

    【讨论】:

    • 有人可以对此进行扩展吗?如何设置迁移?如何建立关系?
    • 迁移只需要解决多态的belongs_to关系。 rails 文档涵盖了这一点,如果您需要它,很高兴为您提供帮助。关系就在那里——不确定你在问什么。有很多通过连接habtm关系中的对象。
    • 这可能在此期间发生了变化?看起来 Rails 现在支持 has_and_belongs_to_many 没有中间表:guides.rubyonrails.org/…
    【解决方案2】:

    Resolveu parcialmente。

    考虑到我们可以使用的框架,它确实解决了问题,但它增加了“不必要的”复杂性和代码。通过创建一个中间模型(我将其称为 B),并假设 A -> B -> C 是“A has_many B's which has_many C's”,我们有另一个 AR 模型,它将在内存中加载另一个 AR 类实现加载,并将实例化仅用于到达 C 实例。你总是可以说,如果你使用 :through 关联,你不会加载 B 关联,但是你会得到一个更过时的模型,它只会在那里看到商队经过。

    事实上,这可能是 Active Record 中缺少的功能。我建议将其作为一项添加功能,因为它一直引起我自己的关注(这就是我在这篇文章中希望找到解决方案的方式:))。

    吃喝玩乐

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-21
      • 1970-01-01
      • 1970-01-01
      • 2011-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多