Rails has_many:通过关联

我正在尝试创建一个rails应用程序,用户可以在其中创建活动并邀请参与者加入并需要您的帮助! 我一直在圈子里,尝试一些东西,但似乎根本不对,这现在让我发疯! 我正在使用rails 4。

你会如何设置活动模型?

User has_many :events through :meeting //for the participants? has_many :events // for the organizer? Event belongs to :user has_many :participants, class_name: "User" Participant belongs to :user has_many :events through :meeting Meeting has_many :participants has_many :events 

这有任何意义吗? 我是否需要参与者模型,或者我只是过度设计它? 我想我有点困惑,组织者是一个用户,参与者也是用户和会议需要组织者和参与者所以不太清楚如何使这项工作…

另请阅读我只有在添加参与者时才能建立会议关系。 这会是要走的路吗? 谢谢!

首先,您不需要参与者模型。 如果我想在会议模型中存储一些额外信息,这是我将使用的结构。 如果没有,您可以直接使用has_and_belongs_to_many。

 User has_many :meetings has_many :attending_events, through: :meetings, source: "Event" //for the participants has_many :events // for the event organiser Event belongs to :user // The organiser has_many :meetings has_many :participants, through: :meetings, source: "User" Meeting belongs_to :participant, class_name: "User" belongs_to :attending_event, class_name: "Event" // Use attending_event_id as foreign_key 

不,您不需要Participant模型:

 User has_many :meetings has_many :events, through: :meetings Event has_many :meetings has_many :participants, through: :meetings, class_name: "User" Meeting belongs_to :user belongs_to :event 

User的实例中,您可以执行以下操作:

 user.events # => List of Events 

Event一个实例你可以做到:

 event.participants # => List of Users 

has_many:通过 Ruby Guides中的解释与您想要做的类似,请查看它。

你不想这样做:

 has_many :events has_many :events #doesn't matter that it's a through table 

我过去做过这个,做过……

 User has_many :invites, dependent: :destroy has_many :invited_events, through: :invites, source: :event Event has_many :invites, dependent: :destroy has_many :invitees, through: :invites, source: :user Invite belongs_to :event belongs_to :user 

然后在邀请连接表中,为creator提供一个布尔列,以了解该用户是否创建了该事件。 您还可以添加一列来显示用户是否接受了邀请(以显示参与)。

干净简单has_many通过…不复杂=)