Riding Rails: Ruby on Rails 2.3.4: Security Fixes
New Features
Added db/seeds.rb as a default file for storing seed data for the database. Can be loaded with rake db:seed commit
マスタデータの初期投入に使うって感じか。
使い方
config/seeds.rbにデータ投入のscriptを書いて、rake db:seed
sample
User、Blog(has_many Comment)、Comment(belongs_to Blog)モデルを例にすると、こんな感じ。
rake db:seed するとデータが投入される。
上で紹介したrailscastsのようにfixtureを取り込むこともできる。
# mysqlのautoincrementを初期化 def set_autoincrement_number(table_name, number) ActiveRecord::Base.connection.execute "ALTER TABLE #{table_name} AUTO_INCREMENT=#{number}" end # Initialize User.delete_all #関連が無ければ一括delete Blog.destroy_all #関連が有れば一括destroy(遅い場合は各モデル毎にdelete_allでもいいかな) set_autoincrement_number(:users, 0) set_autoincrement_number(:blogs, 0) set_autoincrement_number(:comments, 0) # Insert data (1..10).each do |i| b = Blog.new(:title => "○○#{i}について", :description => "○○#{i}hogehoge") %w{そうそう いやいや すばらしい}.each do |c| b.comments.build(:blog_id => i, :comment => c) end b.save end User.create(:name => "テスト1") User.create(:name => "テスト2")
本題とはそれるが
mysqlのauto_incrementを初期化もしたかったので下記を参考にさせていただきました。
僕は木になりたい。。。 : Rails 初期データ投入時の auto_increment項目のクリア - livedoor Blog(ブログ)
感想
上記sampleでは、Blog-Commentのデータも入れちゃったが
こういうテストデータはfixtureで定義した方がいいのかな。
でもfixtureって見にくいからなぁ。
ケース毎のデータは、excelで用意して
マクロでfixtureを生成とかにした方がいいんだろうか。
でも脱excelしたいしなぁ。
うだうだ。