🌱
【Rails】seeds.rbとは
seedとは
データベースに初期データを追加するためのもので主に開発やテストの目的で使われる。
例えば、デモデータやテストデータを作成するときに使用し、アプリケーションが最初から動作するように準備することができる。
使い方
- データの追加
seeds.rb
ファイル内で、モデルを使ってデータを作成し、データベースに追加する。
例えば、Admin
モデルの管理者を作成する場合:
rb/seeds.rb
# 例: 管理者を作成する
Admin.create!(
email: 'admin@admin',
password: 'adminmin'
)
- コマンド実行
1で記述したデータをデータベースに追加するためには、以下のコマンドを実行する。
ターミナル
rails db:seed
- データの削除
開発やテストを繰り返す際には、データのリセットが必要になることもある。db:seed
コマンドは、データベースにデータを追加するが、既存のデータを消すことはない。データベースをリセットし、seeds.rb
ファイルを再実行したい場合は、以下のコマンドを実行する。
ターミナル
rails db:reset
このコマンドにより、データベースを完全にリセットして初期状態に戻すことができる。
手順としては以下の通り。
①データベース削除
既存のデータベースを完全に削除。
② マイグレーションの再実行
③ seeds.rb
の実行
- データの追加
2のコマンドを一度実行した後に、seedファイルにデータを追記し再度実行すると、既存のデータがデータベースに既にあるためエラーが発生する。
その場合は、①3項のリセットし再実行、②コメントアウトし再実行 のアプローチがとれる。
②の場合の例:
rb/seeds.rb
# 管理者は追加済なので全てコメントアウトする
# Admin.create!(
# email: 'admin@admin',
# password: 'adminmin'
# )
genre = Genre.create!(
name: "ケーキ"
)
item = Item.create(
name: "チーズケーキ",
introduction: "濃厚チーズ",
price: 400,
is_available: true,
genre_id: genre_id
image: File.open('app/assets/images/cake.jpg')
)
これにより、管理者のデータは追加されず(エラーを起こさず)に、商品のデータが追加される。
チーム開発では追加データが追加されずにずっとエラーが発生していました。エラ―の原因がわからずメンターさんに聞いたところ、データの重複だと判明。
Discussion