Ruby on Rails has_many关系

时间:2015-11-03 14:42:05

标签: ruby-on-rails

我从Ruby on Rails开始,我遇到了一些困难。

为了给出一些上下文我想要做的是一个用户可以创建帐户的应用程序,每个帐户都有一个频道,每个频道都有一定数量的视频。

每个视频都可以添加视频的时间表。所以时间表也有很多视频。

到目前为止,我有以下型号:

class Channel < ActiveRecord::Base
  belongs_to :member
  has_many :videos
end

class Member < ActiveRecord::Base
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

  has_one :channel
  has_many :timelines
end

class Video < ActiveRecord::Base
  belongs_to :channel
end

class Timeline < ActiveRecord::Base
  belongs_to :member
  has_many :videos
end

如何构建视频属于频道且同时属于时间线的关系?

我认为最好的方法是使用名称 timelinerelation 的新表格,其字段为 ID_TIMELINE ID_VIDEO ,例如对于时间轴,我有视频2,3,4,对于时间轴2,我有视频3,4,5。

所以表格会有:

1 2;
1 3;
1 4;
2 3;
2 4;
2 5;

问题是,我不知道如何在轨道上的ruby中执行此操作。

2 个答案:

答案 0 :(得分:1)

您不需要额外的桌子。只需将字段timeline_id添加到视频模型并添加另一个belongs_to关系

答案 1 :(得分:1)

按照您提供的示例,我看到视频可以属于多个时间轴。如果是这样,您需要将多对多关系设置为大纲here

在您的情况下,您可以通过运行:

来创建连接模型,例如TimelineRelation

rails g model TimelineRelation timeline:references video:references

class Video < ActiveRecord::Base
  belongs_to :channel
  has_many :timeline_relations
  has_many :timelines, through: timeline_relations
end

class Timeline < ActiveRecord::Base
  belongs_to :member
  has_many :timeline_relations
  has_many :videos, through: timeline_relations
end

class TimelineRelation < ActiveRecord::Base
  belongs_to :timeline
  belongs_to :video
end