[英]Rails has_many :through association
我正在尝试创建一个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
这有任何意义吗? 我是否需要参与者模型,或者我只是过度设计它? 我想我有点困惑,组织者是一个用户,参与者也是用户和会议需要组织者和参与者所以不太清楚如何使这项工作...
另请阅读我只有在添加参与者后才能建立会议关系。 这会是要走的路吗? 谢谢!
不,您不需要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_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
你不想这样做:
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通过...不复杂=)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.