如何在相同模型之间设置有两个不同的关联

时间:2013-08-31 19:30:45

标签: ruby-on-rails ruby-on-rails-4 relationship rails-activerecord

我有两个模型,UserEvent,我会在它们之间设置两个不同的关联。

我想:
- 拥有许多托管事件的用户
- 有许多参加活动的用户
- 属于一个用户(所有者/创建者)的事件
- 属于许多用户(与会者)的事件

对于有人参加的活动而言,这是一个拥有并且属于许多关系的东西,并且只有很多用于托管事件,我只是不知道如何正确设置它/轨道方式。

我知道我需要一个users_attended_events表

认为User模型

上会是这样的
has_many :events, through: :hosted_events
has_many :events, through: :attended_events

但是我对Event的模型有什么看法?

我有:

belongs_to: user
alias_attribute :owner, :user
alias_attribute :creator, :user

has_many :users, through:??? 

这应该是users_attended_events表,所以..我会在这里放什么?我如何命名这个“参加者”

1 个答案:

答案 0 :(得分:1)

对于托管活动的用户而言,听起来并不需要通过关联的has_many。如果您的hosted_by_id表格上有events列,那么这样的内容就足够了(在 user.rb 中):

has_many :hosted_events, class_name: "Event", foreign_key: "hosted_by_id"

参加假设包含attendee_idevent_id列的联接类的事件:

class AttendeeEvent < ActiveRecord::Base

  belongs_to :attendee, class_name: "User"
  belongs_to :event

end

您可以将以下关联添加到 user.rb

has_many :attendee_events, foreign_key: "attendee_id"
has_many :attended_events, through: :attendee_events, source: :event

source: :event选项表示此关联的目标对象是从加入对象上的event关联中找到的。

event.rb 中的关联是:

belongs_to :hosted_by, class_name: "User"
has_many :attendee_events
has_many :attendees, through: :attendee_events