Ruby on rails Rails有很多:通过关联

Ruby on rails Rails有很多:通过关联,ruby-on-rails,ruby,ruby-on-rails-4,relationship,activemodel,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 :pa

我正在尝试创建一个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_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
然后在invite join表中,为
creator
设置一个布尔列,以了解该用户是否创建了事件。您还可以添加一列以显示用户是否接受邀请(以显示参与)


干净和简单有很多通过。。。不复杂=)

不,您不需要
参与者
模型:

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.participants # => List of Users
通过
事件的实例
可以执行以下操作:

user.events # => List of Events
event.participants # => List of Users

Ruby指南中的解释与您想要做的类似,请查看。

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

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

结帐,谢谢。我想这样试试。真的很有帮助,太好了。我快到了!不过有一点需要澄清。对于会议,会议是属于:活动还是属于:出席活动?我想我的会议迁移应该有:参与者id和出席活动id,对吗?而不是用户id事件id?再次感谢,你可以用它来增加语义。我正在编辑答案。虽然没有什么问题,但最终还是成功了。需要使用source而不是class_name来表示has_many through,在会议中它应该属于:event而不是attendent_event,class_name不需要表示活动参与者。这些问题确实帮助了我,我已经根据你的评论编辑了我的答案,这样可以帮助其他人。