gpt4 book ai didi

ruby-on-rails - 除非在 Rails 中播种时保存了父级错误,否则无法调用 create

转载 作者:行者123 更新时间:2023-12-03 03:29:53 27 4
gpt4 key购买 nike

我正在尝试使用一个简单的种子文件填充我的 SQLite3 数据库,该文件应该在 Film 表中创建一堆电影条目,然后为存储在 Comments 表中的该电影创建一些评论。

formats = %w(Beta VHS IMAX HD SuperHD 4K DVD BlueRay)
30.times do
film = Film.create(title: "#{Company.bs}",
director: "#{Name.name}",
description: Lorem.paragraphs.join("<br/>").html_safe,
year: rand(1940..2015),
length: rand(20..240),
format: formats[rand(formats.length)]
)
film.save
(rand(0..10)).times do
film.comments.create( author: "#{Name.name}",
title: "#{Company.bs}",
content: Lorem.sentences(3).join("<br/>").html_safe,
rating: rand(1..5)
)
end
end

一旦我执行 rake db:seed 我不可避免地会得到错误

ActiveRecord::RecordNotSaved: You cannot call create unless the parent is saved

并且没有记录添加到电影或评论中

我的 film.rb 文件是

class Film < ActiveRecord::Base
has_many :comments

validates_presence_of :title, :director
validates_length_of :format, maximum: 5, minimum:3
validates_numericality_of :year, :length, greater_than: 0
validates_uniqueness_of :title
paginates_per 4
end

使用从“格式”列表中选择的格式创建影片时,“格式”的长度限制会引发错误

最佳答案

ActiveRecord::RecordNotSaved: You cannot call create unless the parent is saved

当您尝试保存子关联(评论)但父关联(影片)尚未保存时,会发生这种情况。

film 似乎未保存。查看代码,film = Film.create(...) 似乎未通过验证,因此 film.comments.create(..) 无法继续。在不知道更多关于哪个验证失败的情况下,我只能说这么多。

我建议在 seeds.rb 中的任何地方使用 create!(...)。如果记录无效,bang 版本将引发异常,并有助于防止静默失败。

关于ruby-on-rails - 除非在 Rails 中播种时保存了父级错误,否则无法调用 create,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28903949/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com