←Rails 6で認証認可入り掲示板APIを構築する #13 認証ヘッダの付与
完成図
$ rails db:seed
-----user start-----
count from: 0
count to: 10
3.4542s
-----user end-----
-----post start-----
count from: 0
count to: 13
0.1095s
-----post end-----
3.5883s
seedsファイルの編集
まずはcontrollerの修正と同じく、postはuserから生成するため、user_seeds.rbから作っていきます。
db/seeds/user_seeds.rb
# frozen_string_literal: true
unless User.exists?
10.times do |i|
email = "test#{i + 1}@example.com"
User.create!(email: email, password: "password",
uid: email, provider: "email", name: Faker::Name.name)
end
end
とりあえず10ほぼユーザーを生成してみましょう。
続いて、post_seeds.rbを上記で生成したユーザーに所属させる形で生成します。
db/seeds/post_seeds.rb
# frozen_string_literal: true
unless Post.exists?
users = User.all
users.each do |user|
Random.rand(0..3).times do
user.posts.create!(subject: Faker::Lorem.word, body: Faker::Lorem.paragraph)
end
end
end
全ユーザーを取得し、0から3件ランダムで投稿を生成します。
Random.rand(x..x)
はseedでよく使う手法なので覚えておくと良いです。
db/seeds.rbの編集
db/seeds.rb
# frozen_string_literal: true
seed_models = %i[user post]
all_process_time = Benchmark.realtime do
seed_models.each do |model|
puts "-----#{model} start-----"
puts "count from: #{model.to_s.classify.constantize.count}"
process_time = Benchmark.realtime do
require "./db/seeds/#{model}_seeds"
end
puts "count to: #{model.to_s.classify.constantize.count}"
puts "#{format('%.4<time>f', time: process_time)}s"
puts "-----#{model} end-----"
end
end
puts "#{format('%.4<time>f', time: all_process_time)}s"
$ rails db:seed
-----user start-----
count from: 0
count to: 10
3.4542s
-----user end-----
-----post start-----
count from: 0
count to: 13
0.1095s
-----post end-----
3.5883s
modelが増えてきて処理時間が伸びてきたら、どこがボトルネックになっているのか調査しやすくなるはずです。