Hatena::Grouprubyist

うんたらかんたらRuby RSSフィード

2010-01-102.3.4の新機能seedを使ってみた

2.3.4の新機能seedを使ってみた

| 2.3.4の新機能seedを使ってみた - うんたらかんたらRuby を含むブックマーク はてなブックマーク - 2.3.4の新機能seedを使ってみた - うんたらかんたらRuby

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


マスタデータの初期投入に使うって感じか。


参考

Rails 2.3.4で追加されたseeds.rbについて - ひげろぐ

Railscasts - Seed Data


使い方

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したいしなぁ。

うだうだ。

トラックバック - http://rubyist.g.hatena.ne.jp/rochefort/20100110