0

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

  • User (:as Organizer) <-------> 事件,多对多关系
  • 用户(:作为参加者)<--------> 事件,多对多关系

我猜测是否可以使用两个不同的 has_many_and_belongs_to 关联与多态性来实现关系。我是 Rails 新手,因此我将不胜感激有关该问题的任何帮助。

4

2 回答 2

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

活动组织者协会也有类似的情况。

在这里查看我的问题

于 2012-06-09T10:43:34.053 回答
0

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

于 2012-06-09T09:55:42.557 回答