【パーフェクト Ruby on Rails】を読む - その17

3-3-4 あらかじめ用意したデータを読み込む(seed.rb)

seedデータを投入の際は、!付きメソッドを利用し、エラー発生にすぐに気づけるようにすると良いです。

Blog.create!(name: 'cool blog')

batch処理とは

バッチ処理とはコンピュータでひとまとまりのデータを一括して処理する方式です。水をバケツですくうイメージをしてもらって、指定する量によってコップなのかバケツなのか容量の大きさが決まってくるといったイメージです。


・seedに書いたデータを反映させる

bin/rails db:seedコマンドでseed.ebファイルを読み込んで、中に記載されているあらかじめ記入しておいたものを初期データとしてDBに登録できます。
※ 重複は無視されるのでコマンドを入力した回数だけDBにはデータが増えていきます。

% bin/rails db:seed
% bin/rails db:seed
% bin/rails db:seed
% bin/rails runner "p Hoge.count" # p ってなんだっけ🤔?
=> 3 # 3回seedしたので3件ある
# 本書にはrunnerで書いてますがrails cでも確認できるのでrunner使う意味があまりわからないです
  • db:seed:replantを実行すると一度レコードを削除して、改めてdb:seedを実行します。
% bin/rails db:seed:replant
% bin/rails runner 'p Blog.count'
=> 1

rubyのpメソッドとputsメソッドの違いについて復習しました

どちらも画面に表示するメソッドですが、どのように使い分ければ良いのかというと、pは原則、デバッグの道具として使用します。putsはプログラムの機能として意図して表示するときに使用します。


rails db:setupの挙動について

db:dropでデータベースを削除して、db:setupを実行すると、
db:create, db:schema:load, db:seedを一括で行ってくれます。

db:resetの挙動について

db:drop, db:setupまでを一気に実行します。

db:migrate:resetの挙動について

db:drop→db:create→db:migrateの順で実行されます。

db:resetとdb:migrate:resetの挙動の違いまとめ

コマンド db:reset db:migrate:reset
db:drop
db:create
db:migrate x
db:schema:load x
db:seed x

一度消して、再作成した空のデータベースに対してデータを取り込むアプローチが違います。
db:resetはschemaからで、db:migrate:resetは migrationファイルから取り込みます。
db:resetではseedまで行いますが、db:migrate:resetではseedは行いません。

参照

Rails: db:reset よりも db:migrate:reset を使うべき理由 (とその違い)
現場で使える Ruby on Rails 5速習実践ガイド