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で導入されたらしい。
参考にしたサイト
- Rails 2.3.4で追加されたseeds.rbについて - ひげろぐ
- 詳しく書いてあり、大変参考になりました