在rails

时间:2018-04-04 13:50:11

标签: ruby-on-rails postgresql

我似乎无法找到直接的答案,所以让我解释一下我试图用我的例子做什么:

我试图将3张桌子连接在一起,我有Users ArtistsEvents

现在我要做的就是在这里制作一个巨大的蜘蛛网,计划是让用户关注艺术家和/或活动。

艺术家belongs to一个活动(活动中可以有很多艺术家)

这是我开始感到困惑的地方。我如何开展这项工作,以便用户与活动/艺术家联系,具体取决于他们/他们遵循的内容? (这在视图中完成,用户转到事件页面,然后可以单击stay updated按钮,然后保存要在以后使用的偶数或艺术家ID。

我不能得到的是,

我需要在数据库中创建哪些列,

我需要对模型进行哪些操作才能将它们全部链接在一起?

我所有的模特目前都是空的。

1 个答案:

答案 0 :(得分:2)

这是一个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

要将“用户”表格添加到组合中,您必须创建UserArtistsUserEvents

注意UserArtists等表格名称可以改名为Follows - 这完全取决于您认为清楚的内容。