Ruby on rails Rails 5中的自引用关联
我正在尝试在Rails 5中设置一个自引用关联。我有一个视频模型。视频可能有以前的视频(如电视连续剧)。理想情况下,它会这样做Ruby on rails Rails 5中的自引用关联,ruby-on-rails,activerecord,ruby-on-rails-5,Ruby On Rails,Activerecord,Ruby On Rails 5,我正在尝试在Rails 5中设置一个自引用关联。我有一个视频模型。视频可能有以前的视频(如电视连续剧)。理想情况下,它会这样做 irb(main):001:0> first_video = Video.create(url: 'https://youtu.be/W0lhlPdo0mw') irb(main):002:0> second_video = Video.create(url: 'https://youtu.be/gQhlw6F603o', previous_video:
irb(main):001:0> first_video = Video.create(url: 'https://youtu.be/W0lhlPdo0mw')
irb(main):002:0> second_video = Video.create(url: 'https://youtu.be/gQhlw6F603o', previous_video: first_video)
irb(main):003:0> second_video.previous_video
=> #<Video id: 1, url: "https://youtu.be/W0lhlPdo0mw">
迁移
class CreateVideo < ActiveRecord::Migration[5.2]
def change
create_table :videos do |t|
t.string :url, null: false
t.references :previous_video, class: 'Video'
t.timestamps
end
end
end
<代码>类CreateVideo干杯队 您需要如下设置关联:
has_one :prev_video, :class_name => 'Video', :foreign_key => 'previous_video'
已经设置好你可以呼叫的
@video.prev_video
外键是数据库列,我称之为prev_video的列可以根据您的意愿命名,只要您不使用与db列(previous_video)相同的名称。
t.references
用于属于模型上的关联,而在关联模型上有一个。下面是我将如何编写模型和迁移来实现您想要的
更新(2019-05-31):
修复了迁移中的外键创建,因此它使用正确的to表。还添加了参考链接以获取更多信息
#模型
类视频<应用程序记录
属于(
#默认情况下,将使用关联名称+“\u id”作为列名
:下一段视频,
可选:true,
class_name:'Video',#将使用指定模型的表
逆\u的::上一个\u视频
)
你有吗(
:上一段视频,
class_name:'Video',#将使用指定模型的表
外键:“下一个视频id”,
倒数:下一个视频
)
结束
#迁移
类CreateVideo
- (
t.references
)
- (由
t.references
使用)
错误的原因是t.references将在数据库中创建一个以前的\u video\u id
,而不是video\u id
。如果您查看架构文件,您应该能够看到这一点。不next\u video
将在此处查找名为next\u videos
的表,因为它不存在。。。它将抛出一个错误?我更新了答案以修复外键创建。
@video.prev_video