我有两个模型,用户和事件。我需要用户和事件之间的两种关系。
- User (:as Organizer) <-------> 事件,多对多关系
- 用户(:作为参加者)<--------> 事件,多对多关系
我猜测是否可以使用两个不同的 has_many_and_belongs_to 关联与多态性来实现关系。我是 Rails 新手,因此我将不胜感激有关该问题的任何帮助。
我有两个模型,用户和事件。我需要用户和事件之间的两种关系。
我猜测是否可以使用两个不同的 has_many_and_belongs_to 关联与多态性来实现关系。我是 Rails 新手,因此我将不胜感激有关该问题的任何帮助。
为此,您不需要多态关系。
要定义两个模型之间的两个关联,您可以执行以下操作:
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
活动组织者协会也有类似的情况。
在这里查看我的问题
正如我在评论中提到的,如果您的关系组织者和与会者可以同时存在于同一用户,您只需要多态关联。如果是这种情况,请使用多态关联,如果不是,您可以使用has_many :through
关联或has_and_belongs_to_many
关联。第一个更灵活,因为您有一个额外的模型,例如可以进行验证。