我有两个型号,用户和事件。我需要User和Event之间的两种关系。
我猜测是否可以使用两个不同的has_many_and_belongs_to与多态关联来实现关系。我是rails的新手,所以我很感激有关这个问题的任何帮助。
答案 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
关联。第一个是更灵活的,因为你有一个额外的模型可以举行验证,例如。