我对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
  • 如何进行HABTM表迁移?我有些困惑,对此我没有任何帮助。
  • 它会起作用吗?
  • 最佳答案

    不,您不能这样做,不存在多态的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关系中的链接表,但允许您对事件进行多态行为。

    10-01 20:00