CSVファイルのfixtureをmigrationで読み込む

CSVファイルのfixtureは、rake db:fixtures:loadコマンドで読み込めるが、開発中はDBを何度も初期化する(rake db:migrate:reset)ので、初期化後に毎回実行するのが面倒。

そこで、fixtureをrake db:migrateで読み込めるようにした。

ruby script/generate migration LoadFixtures

とコマンドを打つと、プロジェクトフォルダ/db/migrateに、20101206130501_load_fixtures.rb のような名前のファイルができる。そのファイルに以下を入力すればよい。ごく普通に、CSVファイルからデータを取得して、モデルをcreateするだけ。

require 'csv'

class LoadFixtures < ActiveRecord::Migration
  def self.up
    header_line = true
    
    CSV.open("#{RAILS_ROOT}/test/fixtures/areas.csv", 'r') do |lat,lng,address|
      if header_line
        header_line = false
        next
      end
      
      Area.create(:lat => lat, :lng => lng, :address => address)
    end
    
    # records = Area.find(:all)
    # puts "Added #{records.count} areas in migration."
  end

  def self.down
  end
end