我似乎找不到一个直截了当的答案,所以让我解释一下我想用我的例子做什么:
我试着把三张桌子连在一起,我有UsersArtistsEvents
现在我要做的是在这里建立一个巨大的蜘蛛网,计划是让用户跟踪艺术家和/或事件。
艺术家belongs to一个事件(一个事件可以有许多艺术家)
这就是我开始困惑的地方。我该如何着手使此工作,以便用户根据他们关注的人/内容连接到事件/艺术家?(这是在视图中完成的,用户转到事件页面,可以单击stay updated按钮,然后保存事件id或艺术家id以供以后使用。
我不明白的是,
我需要在数据库中创建哪些列,
我需要对这些模型做些什么来将它们连接在一起?
我所有的模型都是空的。

最佳答案

这是一个has_many :through协会。Rails Associations guide在这个主题上非常详细,所以请查看它以获得深入的解释。
让我们从ArtistsEvents表开始。
一个艺术家可以在许多活动中演奏,一个活动将有许多艺术家。要实现这种关系,需要一个名为EventArtists的第三个表,该表跟踪哪些事件需要哪些艺术家,哪些艺术家在哪些事件上演奏。
一个事件可以有多个艺术家(EventID 1),多个事件可以有一个重复艺术家(ArtistID 1)。
例子:

EventsArtists
-----------------
ArtistID EventID
1        1
2        1
1        2

您的EventArtists至少有上表中列出的两列,分别是ArtistIDEventID
然后,您的模型将如下所示。
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

要将Users表添加到mix中,必须创建UserArtistsUserEvents
注意:可以改为将UserArtists等表名命名为Follows——这完全取决于您认为什么是清楚的。

关于ruby-on-rails - 在Rails的3个表之间建立数据库连接,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49652776/

10-15 21:04
查看更多