Rails 4 activerecord多态多对多

时间:2015-02-21 15:01:45

标签: ruby-on-rails-4 rails-activerecord polymorphic-associations

我有一个活动模型,以及群组和个人的模型。

目前这些并未以任何方式关联,但我正在研究如何在Active Record中设置必要的关联。

活动将有许多参与者,包括团体和个人。团体或个人可以参加许多活动。

看起来多态的ActivityParticipant关联可能会这样做,但双方需要多对多。

我可能需要一张有

的表格

ACTIVITY_ID activity_participant_type activity_participant_id

如果感谢有关activerecord如何处理此关联以及关联定义的任何建议。

提前致谢 丹

1 个答案:

答案 0 :(得分:1)

首先是模型

def ActivityParticipant < ActiveRecord::Base
  belongs_to :participant, polymorphic: true
  belongs_to :activity
end

def Groups < ActiveRecord::Base
  has_many :activity_participants, as: :participant
  has_many :activities, through: :activity_participants
end

def Individual < ActiveRecord::Base
  has_many :activity_participants, as: :participant
  has_many :activities, through: :activity_participants
end

至于迁移

def change
  create_table :activity_participants do |t|
    t.references :participant, polymorphic: true, index: true
    t.references :activity
    t.timestamps
  end
end

至于最终的架构,它将是

# activity_participants
activity_id | participant_type | participant_id

我认为这应该可行,不需要在任何其他表中添加任何引用。