FactoryGirlでHasManyな関連モデルも同時に生成する

下のようなBookとPageというモデルがあったとして、Bookを作成する際にPageも一緒に作りたいという場合。

環境

class Book < ActiveRecord::Base
  has_many :pages
  accepts_nested_attributes_for :pages
  validates :pages, length: { minimum: 1 }
end
class Page < ActiveRecord::Base
  belongs_to :book
  validates :book, presence: true
end

FactoryGirlではこう書ける

FactoryGirl.define do
  factory :book do
    title  "タイトル"
    after(:build) do |book|
      book.pages << build(:page, book: book)
    end
  end
end

これでBookを作成した時に配下のPageもひとつつくられる

FactoryGirl.create(:page)
Ruby on RailsによるWEBシステム開発、Android/iPhoneアプリ開発、電子書籍配信のことならお任せください この記事を書いた人と働こう! Ruby on Rails の開発なら実績豊富なBPS

この記事の著者

芝原悠介

heathrowでは設計、開発、運用なんでもやってます。 好きな言語は、最近もっぱらRuby。 http://heathrow.co.jp/

芝原悠介の書いた記事

週刊Railsウォッチ

インフラ

BigBinary記事より

ActiveSupport探訪シリーズ