🕌

データ初期化の極意:Railsのseedファイルとseed-fu完全ガイド

2023/08/28に公開

1. Railsのデフォルトのseedファイル

Railsには、初期データをデータベースに投入するためのdb/seeds.rbファイルがデフォルトで用意されています。

使用方法:

# db/seeds.rb
Partner.create(name: 'Partner A', email: 'partnera@example.com')

このコードでPartnerモデルに対してデータを作成します。挿入後、次のコマンドを実行します:

$ rails db:seed

2. seed-fuの導入と使い方

seed-fuは、idを指定してレコードを作成・更新することが特徴のgemです。

インストール:

gem 'seed-fu'

その後、bundle installを実行。

使用方法:

# db/seeds.rb
Partner.seed(:id,
  { id: 1, name: 'Partner A', email: 'partnera@example.com' },
  { id: 2, name: 'Partner B', email: 'partnerb@example.com' }
)

上記のコードは、Partnerモデルに対してIDが1と2のデータを作成または更新します。この後もrails db:seedでデータをデータベースに投入します。

3. バリデーションの挙動

Railsのデフォルトのseedファイル:

通常のActiveRecordのバリデーションが適用されます。バリデーションエラーが発生すると、エラーメッセージが表示され、そのデータはDBに保存されません。

seed-fu:

デフォルトでバリデーションはスキップされます。しかし、:validate オプションを使用することでバリデーションを有効/無効にできます。

# バリデーションを有効にする場合
Partner.seed(:id, { id: 1, name: 'Partner A', email: 'partnera@example.com' }, validate: true)

まとめ

Railsのデフォルトのseedファイルはシンプルで直感的に使える一方、seed-fuは複雑なシーディングのニーズに応えるための高度なオプションを提供しています。シーディングの要件に応じて適切なツールを選択することが重要です。

Discussion