🌱

【Rails】seeds.rbとは

2023/07/24に公開

seedとは

データベースに初期データを追加するためのもので主に開発やテストの目的で使われる。
例えば、デモデータやテストデータを作成するときに使用し、アプリケーションが最初から動作するように準備することができる。

使い方

  1. データの追加
    seeds.rbファイル内で、モデルを使ってデータを作成し、データベースに追加する。
    例えば、Adminモデルの管理者を作成する場合:
rb/seeds.rb

# 例: 管理者を作成する
Admin.create!(
   email: 'admin@admin',
   password: 'adminmin'
)
  1. コマンド実行
    1で記述したデータをデータベースに追加するためには、以下のコマンドを実行する。
ターミナル
rails db:seed
  1. データの削除
    開発やテストを繰り返す際には、データのリセットが必要になることもある。db:seedコマンドは、データベースにデータを追加するが、既存のデータを消すことはない。データベースをリセットし、seeds.rbファイルを再実行したい場合は、以下のコマンドを実行する。
ターミナル
rails db:reset

このコマンドにより、データベースを完全にリセットして初期状態に戻すことができる。
手順としては以下の通り。
①データベース削除
既存のデータベースを完全に削除。
② マイグレーションの再実行
seeds.rbの実行

  1. データの追加
    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