rails association has_many_and_belongs_to

时间:2012-06-09 09:37:12

标签: ruby-on-rails associations

我有两个型号,用户和事件。我需要User和Event之间的两种关系。

  • 用户(:作为组织者)< ------->事件,多对多关系
  • 用户(:作为与会者)< ------->事件,多对多关系

我猜测是否可以使用两个不同的has_many_and_belongs_to与多态关联来实现关系。我是rails的新手,所以我很感激有关这个问题的任何帮助。

2 个答案:

答案 0 :(得分:2)

你不需要多态关系。

要定义两个模型之间的两个关联,您可以执行以下操作:

class User 
  has_many :organized_events, foreign_key: :organizer_id, class_name: "Event"
  has_many :attended_events, foreign_key: :attendee_id, class_name: "Event"
end

class Event
  belongs_to :organizer, class_name: "User"
  belongs_to :attendee, class_name: "User"
end

这会给你一对多的关系。

如果您需要多对多,则每个关联都需要一个联接表。

class User
  has_many :attendances, foreign_key: :attendee_id
  has_many :attended_events, through: :attendances
end

class Event
  has_many :attendances, foreign_key: :attended_event_id
  has_many :attendees, through: :attendances
end

class Attendance
  belongs_to :attended_event, class_name: "Event" 
  belongs_to :attendee, class_name: "User"        
end

与活动组织者协会类似的事情。

请参阅我的问题here

答案 1 :(得分:0)

正如我在评论中提到的,如果您的关系组织者和与会者可以同时存在于同一用户,则只需要多态关联。如果是这种情况,请使用多态关联,否则可以使用has_many :through关联或has_and_belongs_to_many关联。第一个是更灵活的,因为你有一个额外的模型可以举行验证,例如。