Passion make things more better

Rails, Swiftあたりの話題を中心に書いています

Railsでseedデータを分割して実行できるようにする

個人的にRailsのseed運用は以外と悩みがちです。seed-fu使ったりと色々やりましたが、これから説明する方法に落ち着きました。

  • ファイルを指定してseedを実行できるようにrake taskを作成する
  • db/seeds以下のディレクトリを作成し、以下にxxxx.rbといった実行したい処理を書いたファイルを用意
  • bundle exec rake db:seed:xxxx(作成したファイル名)で実行

rake taskの作成

コマンドでファイルを指定して実行できるようにrake taskを作成します。 ※参考に記載したサイトのコードをお借りしております。

# lib/tasks/seed.rakeとして以下を作成する

Dir.glob(File.join(Rails.root, 'db', 'seeds', '*.rb')).each do |file|
  desc "Load the seed data from db/seeds/#{File.basename(file)}."
  task "db:seed:#{File.basename(file).gsub(/\..+$/, '')}" => :environment do
    load(file)
  end
end

seedファイルの用意

db/seedsというディレクトリを作成し、以下に行いたい処理を記載したファイルを作成します。 今回は例でCategory(nameカラムを持つ)モデルに対してseedデータを挿入するファイルを作成します。

# db/seeds/category.rb

Category.create(name: 'サンプル')

seedファイルの実行

db/seeds/category.rbを以下のコマンドにて実行します。

~ bundle exec rake  db:seed:category

これでseedデータが挿入できたかと思います。 個人的にはこのやり方が一番しっくりきているので、しばらくはこちらで続けたいと思います。

参考