環境
- rails 3.1.1
- factory_girl 2.2.0
requireでfactory_girlとfactoryファイルすべてを読み込むと、seeds.rbでもfactory_girlが使えます。seeds.rbでfactory_girlを使うのは、テストと同じデータをブラウザでも確認できる、seeds.rbを非常に簡潔に書くことができる、といった利点があります。
以下の例では、このようなデータを作成する例です。
- 特定のユーザーを含む6人のUserインスタンスを作成
- 100件のArticleインスタンスを作成
- 100件のArticleインスタンスはそれぞれ、6人のうち1つのuser_idをランダムにふられる
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