Rails has_many:通过关联

时间:2014-04-02 05:40:43

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

我正在尝试创建一个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

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

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

3 个答案:

答案 0 :(得分:3)

不,您不需要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

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

你不想这样做:

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通过...不复杂=)