inohilog

/var/log/inohiro

db/seeds.rb

Railsでサービスを作っていますが、「db」ディレクトリ以下に見慣れないファイルがありました。「db/seeds.rb」。とりあえずググってみると「migrationで定数のデータとかをロードすると後で死ぬことになるので、そう言うデータはdb/seeds.rbで入れるようにしようぜ」ということらしい。
確かにバイトかなんかで、migrationでデータをロード(サンプルデータとか)するようにしちゃってて(そもそもしない方がいい、とRails本に書いてあったと思うが)、大変そうだった記憶がある。別にロードに限らず、データにアクセスするコード全般に対して。
私も、例えばCategoryテーブルを作って、そこに規定値なんかをロードするときに、create_tableするときに一緒に突っ込んじゃったりするんですが(create_tableするときに突っ込むのはあんまり問題ないか...わからん)。

# -*- coding: utf-8 -*-

class CreateCategories < ActiveRecord::Migration
  def self.up
    create_table :categories do |t|
      t.string :name
      t.timestamps
    end

    Category.create :name => "ほげほげ"
    Category.create :name => "ふがふが"

  end
  def self.down
    drop_table :categories
  end
end

これを、db/seeds.rbに切り分けて、

# -*- coding: utf-8 -*-
# This file should contain all the record creation needed to seed the database with its default values.
# The data can then be loaded with the rake db:seed (or created alongside the db with db:setup).
#
# Examples:
#   
#   cities = City.create([{ :name => 'Chicago' }, { :name => 'Copenhagen' }])
#   Major.create(:name => 'Daley', :city => citi

Category.create :name => "ほげほげ"
Category.create :name => "ふがふが"

とした。で、コレをロードするには「rake db:migrate」した後に「rake db:seed」を実行する必要があります。
Rails 2.3.4で導入されたらしい。

参考にしたサイト