Ситуация
# 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
Проблема
Если вы запустите @user = Factory(:user_with_items)
, то @user.items
содержит два элемента. Проблема в том, что элементы не связаны с пользователем в базе данных. Если вы перезагрузите ассоциацию @user.items(true)
, вы получите пустой массив. Я знаю, что вы можете их построить
вручную или создать вспомогательные методы самостоятельно, чтобы построить граф объектов, но я хотел бы избежать этого.
Вопрос
Итак, мой вопрос в том, как вы можете создать отношения has_many в factory_girl, соблюдая стратегию сборки?