Situation
# Models
class User < ActiveRecord::Base
has_many :items
end
class Items < ActiveRecord::Base
belongs_to :user
validates_presence_of :user_id
end
# Factories
Factory.define(:user) do |u|
u.name "foo"
end
Factory.define(:user_with_items, :parent => :user) do |u|
u.items {|items| [items.association(:item), items.association(:item)]}
end
Factory.define(:item) do |i|
i.color "red"
end
Factory.define(:item_with_user, :parent => :user) do |i|
i.association(:user)
end
Problem
If you run @user = Factory(:user_with_items)
then @user.items
contains the two items. The issue is that the items aren't associated with the user in the database. If you reload the association @user.items(true)
then you get back an empty array. I know you can build them
manually or create helper methods on your own to build the object graph, but I'd like to avoid that.
Question
So, my question is how can you build up a has_many relationship in factory_girl while respecting the build strategy?