「rails db:seed」を使って初期データを「Product」に追加しようとした時のエラー
10.times do |i|
Product.create!(
name: "いちごケーキ#{i+1}",
introduction: 'おいしいいちごケーキです!',
genre_id: Genre.find(1).id,
price: 500,
is_active: 'true'
)
end
準備ができたので、
rails db:seed
を実行して、
[vagrant@localhost hoge]$ rails db:seed
rails aborted!
ActiveRecord::RecordNotFound: Couldn't find Genre with 'id'=1
/home/vagrant/work/vagrant/hoge/db/seeds.rb:21:in `block in <top (required)>'
/home/vagrant/work/vagrant/hoge/db/seeds.rb:17:in `times'
/home/vagrant/work/vagrant/hoge/db/seeds.rb:17:in `<top (required)>'
/home/vagrant/work/vagrant/hoge/bin/rails:9:in `<top (required)>'
/home/vagrant/work/vagrant/hoge/bin/spring:15:in `<top (required)>'
bin/rails:3:in `load'
bin/rails:3:in `<main>'
Tasks: TOP => db:seed
(See full trace by running task with --trace)
エラーになりますね…。笑
なんでか原因を調べていたら、「バリデーション」に原因がありました…。
class Product < ApplicationRecord
:
:
:
validates :name, presence: true, length: {minimum: 1, maximum:15}
validates :introduction, presence: true
validates :image, presence: true
validates :genre_id, presence: true
validates :price, numericality: true
validates :is_active, inclusion: {in: [true, false]}
:
:
:
end
あ、「image」が「presence:true(存在していないといけない)」になっている….。
絶対こいつのせいでエラーが起きてるはずなので、
一度コメントにして、
class Product < ApplicationRecord
:
:
:
validates :name, presence: true, length: {minimum: 1, maximum:15}
validates :introduction, presence: true
# validates :image, presence: true
validates :genre_id, presence: true
validates :price, numericality: true
validates :is_active, inclusion: {in: [true, false]}
:
:
:
end
「rails db:seed」を実行!
rails db:seed
そしたら、問題なく登録されました〜
初めて使ったので、分からないことだらけでした….。
とりあえずは、一安心です。