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