factory_girlを使ってスマートにseedデータを作成する
環境
- rails 3.1.1
- factory_girl 2.2.0
requireでfactory_girlとfactoryファイルすべてを読み込むと、seeds.rbでもfactory_girlが使えます。seeds.rbでfactory_girlを使うのは、テストと同じデータをブラウザでも確認できる、seeds.rbを非常に簡潔に書くことができる、といった利点があります。
以下の例では、このようなデータを作成する例です。
db/seeds.rb
require 'factory_girl' Dir[Rails.root.join('spec/support/factories/*.rb')].each {|f| require f } User.delete_all Article.delete_all FactoryGirl.create(:naoty) FactoryGirl.create_list(:user, 5) FactoryGirl.create_list(:article, 100)
spec/support/factories/users.rb
FactoryGirl.define do factory :user do sequence(:name) {|n| "user #{n}" } end factory :naoty do name 'naoty' end end
spec/support/factories/articles.rb
FactoryGirl.define do factory :article do sequence(:title) {|n| "sample title #{n}" } user_id { User.all.to_a.map(&:id).sample } end end
naoty$ rake db:seed