[Rails] seed-fu を使って初期データを作成する
はじめに
Rails で初期データ作成を便利にする Gem 「seed-fu」 を紹介します。
プロジェクトへの導入の手順、seed データの登録の順で紹介していきます。
導入の手順
インストール
Gemfile に以下を追記し、 bundle install します。
gem 'seed-fu', '~> 2.3'
※ Rails 3.1, 3.2, 4.0, 4.1, 4.2, 5.0 の場合、'~> 2.3'
を指定。
ディレクトリの作成
seed-fu のデフォルトは、下記ディレクトリ配下にある seedファイルを読みます。
#{Rails.root}/db/fixtures
#{Rails.root}/db/fixtures/#{Rails.env}
環境毎に初期データが異なる場合、seedファイルを分けておけば環境毎に読み込んでくれます。
seed ファイルの作成
#{Rails.root}/db/fixtures/users.rb
という名前で Userモデル用の seedファイルを作成します。
User.seed(:id) do |s| s.id = 1 s.name = "jon" end User.seed(:id) do |s| s.id = 2 s.name = "emily" end
以上の記述を行うことにより、id
に該当するレコードが存在しなければ、レコードを新規作成します。
id
に該当するレコードが存在すれば、レコードを更新します。
1度のみ実行したい時
1度のみ実行したい場合は、seed_once
を利用します。
User.seed_once(:id) do |s| s.id = 1 s.name = "jon" end
id以外が主キーの時
id以外が主キーの時は、以下の:email
のように主キーを指定します。
User.seed(:email) do |s| s.email = "jon@example.com" s.name = "jon" end
たくさんのデータを作成したい時
以下のようなシンタックスシュガーが用意されています。
User.seed(:id, { :id => 1, :name => "Jon" }, { :id => 2, :name => "Emily" } )
seed データの登録
下記コマンドでseedデータをDBに登録します。
rake db:seed_fu
rakeタスク実行時にファイルパスを指定する
rakeタスク実行時にFIXTURE_PATH
オプションを付与する事で、seedファイルの読むファイルパスを指定する事ができます。
rake db:seed_fu FIXTURE_PATH=path/to/fixtures
rakeタスク実行時にフィルタを指定する
rakeタスク実行時にFILTER
オプションを付与する事で、実行する seedファイルを指定する事ができます。指定方法はファイル名のカンマ区切りです。
rake db:seed_fu FILTER=users,articles
まとめ
以上の手順によって、
seed-fu を使って初期データの管理ができるようになりました。
とても便利なので、是非あなたの Rails プロジェクトに導入しましょう!