フォロー機能を実験したいのと、次にブックマーク機能を実装したかったので、ユーザーと日記の初期データを作成していきます。

まず最初にGemfileseed_fugemを追加してbundle installします。

gem 'seed-fu'

seedファイルを置くためのディレクトリを作成します。

Sayo-MacBook-Pro:emoji_diary SAYO$ mkdir db/fixtures
Sayo-MacBook-Pro:emoji_diary SAYO$ mkdir db/fixtures/development
Sayo-MacBook-Pro:emoji_diary SAYO$ mkdir db/fixtures/production
Sayo-MacBook-Pro:emoji_diary SAYO$ mkdir db/fixtures/test

開発環境のUserテーブルとDiaryテーブルにデータを作成していきたいと思います。まずdevelopment配下に下記2つのファイルを用意します。

Sayo-MacBook-Pro:emoji_diary SAYO$ touch db/fixtures/development/users.rb
Sayo-MacBook-Pro:emoji_diary SAYO$ touch db/fixtures/development/diaries.rb

日記のデータを作成していきます。このようなデータをidを変えて20個作成しました。

Diary.seed do |s|
  s.id = 1
  s.feeling = '😆'
  s.body = '⛱🐠'
  s.start_time  = Date.yesterday
  s.user_id = 1
end

ユーザーのデータを作成します。id、nickname、nameを変えて10個作成しました。

User.seed do |s|
  s.id = 1
  s.nickname = 'sayo'
  s.name = 'kimsayo'
  s.password  = "password"
end

そして開発環境のデータを作成しようとコマンドを叩くと、エラーに。。InvalidForeignKeyとなっているのですが、外部キーの設定が無効?

Sayo-MacBook-Pro:emoji_diary SAYO$ rails db:seed_fu RAILS_ENV=development

== Seed from /Users/SAYO/workspace/portfolio/emoji_diary/emoji_diary/db/fixtures/development/diaries.rb
 - Diary {:id=>1, :feeling=>"😆", :body=>"⛱🐠", :start_time=>Tue, 01 Jun 2021, :user_id=>1}
 - Diary {:id=>2, :feeling=>"😆", :body=>"⛱🐠", :start_time=>Tue, 01 Jun 2021, :user_id=>2}
 - Diary {:id=>3, :feeling=>"😆", :body=>"⛱🐠", :start_time=>Tue, 01 Jun 2021, :user_id=>3}
rails aborted!
ActiveRecord::InvalidForeignKey: Mysql2::Error: Cannot add or update a child row: a foreign key constraint fails (`emoji_diary_development`.`diaries`, CONSTRAINT `fk_rails_f03fd03c63` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`))
/Users/SAYO/workspace/portfolio/emoji_diary/emoji_diary/bin/rails:5:in `<top (required)>'
/Users/SAYO/workspace/portfolio/emoji_diary/emoji_diary/bin/spring:10:in `block in <top (required)>'
/Users/SAYO/workspace/portfolio/emoji_diary/emoji_diary/bin/spring:7:in `tap'
/Users/SAYO/workspace/portfolio/emoji_diary/emoji_diary/bin/spring:7:in `<top (required)>'

Caused by:
Mysql2::Error: Cannot add or update a child row: a foreign key constraint fails (`emoji_diary_development`.`diaries`, CONSTRAINT `fk_rails_f03fd03c63` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`))
/Users/SAYO/workspace/portfolio/emoji_diary/emoji_diary/bin/rails:5:in `<top (required)>'
/Users/SAYO/workspace/portfolio/emoji_diary/emoji_diary/bin/spring:10:in `block in <top (required)>'
/Users/SAYO/workspace/portfolio/emoji_diary/emoji_diary/bin/spring:7:in `tap'
/Users/SAYO/workspace/portfolio/emoji_diary/emoji_diary/bin/spring:7:in `<top (required)>'
Tasks: TOP => db:seed_fu
(See full trace by running task with --trace)

日記のデータを作るときに失敗しているのかな?と思ったので、user_idの指定の仕方を少し変えて再度試してみました。