我似乎找不到一个直截了当的答案,所以让我解释一下我想用我的例子做什么:
我试着把三张桌子连在一起,我有Users
Artists
和Events
现在我要做的是在这里建立一个巨大的蜘蛛网,计划是让用户跟踪艺术家和/或事件。
艺术家belongs to
一个事件(一个事件可以有许多艺术家)
这就是我开始困惑的地方。我该如何着手使此工作,以便用户根据他们关注的人/内容连接到事件/艺术家?(这是在视图中完成的,用户转到事件页面,可以单击stay updated
按钮,然后保存事件id或艺术家id以供以后使用。
我不明白的是,
我需要在数据库中创建哪些列,
我需要对这些模型做些什么来将它们连接在一起?
我所有的模型都是空的。
最佳答案
这是一个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
要将Users表添加到mix中,必须创建
UserArtists
和UserEvents
。注意:可以改为将
UserArtists
等表名命名为Follows
——这完全取决于您认为什么是清楚的。关于ruby-on-rails - 在Rails的3个表之间建立数据库连接,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49652776/