MENU

【Rails】rails db:seedのエラー

「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

そしたら、問題なく登録されました〜
初めて使ったので、分からないことだらけでした….。

とりあえずは、一安心です。

よかったらシェアしてね!

この記事を書いた人

目次
閉じる