我似乎无法找到直接的答案,所以让我解释一下我试图用我的例子做什么:
我试图将3张桌子连接在一起,我有Users
Artists
和Events
现在我要做的就是在这里制作一个巨大的蜘蛛网,计划是让用户关注艺术家和/或活动。
艺术家belongs to
一个活动(活动中可以有很多艺术家)
这是我开始感到困惑的地方。我如何开展这项工作,以便用户与活动/艺术家联系,具体取决于他们/他们遵循的内容? (这在视图中完成,用户转到事件页面,然后可以单击stay updated
按钮,然后保存要在以后使用的偶数或艺术家ID。
我不能得到的是,
我需要在数据库中创建哪些列,
我需要对模型进行哪些操作才能将它们全部链接在一起?
我所有的模特目前都是空的。
答案 0 :(得分:2)
这是一个has_many :through
关联。 Rails Associations guide对此主题非常详细,因此请查看以获得深入解释。
让我们从Artists
和Events
表开始。
艺术家可以参加许多活动,一个活动将有很多艺术家。为了实现这种关系,第三个表格叫EventArtists
,它跟踪哪些事件需要哪些艺术家,以及哪些艺术家在哪些事件中发挥作用。
一个活动(EventID 1)可以有多个艺术家,多个活动可以有一个重复的艺术家(ArtistID 1)。
示例:强>
EventsArtists
-----------------
ArtistID EventID
1 1
2 1
1 2
您的EventArtists将至少包含上表中列出的两列ArtistID
和EventID
。
您的模型将如下所示。
class Artist < ApplicationRecord
has_many :event_artists
has_many :events, through: :event_artists
class Event < ApplicationRecord
has_many :event_artists
has_many :artists, through: :event_artists
class EventArtist < ApplicationRecord
belongs_to :artist
belongs_to :event
要将“用户”表格添加到组合中,您必须创建UserArtists
和UserEvents
。
注意:UserArtists
等表格名称可以改名为Follows
- 这完全取决于您认为清楚的内容。