这是我的模特:
class Parent < ActiveRecord::Base
has_many :children
accepts_nested_attributes_for :children
validate :parent_must_have_child_status_1
def parent_must_have_child_status_1
errors.add(:base, :no_child_status_1) if children.all? {|c| c.status != 1}
end
end
class Child < ActiveRecord::Base
belongs_to :parent
accepts_nested_attributes_for :parent
validates :parent, :presence => true
end
和我的工厂:
factory :parent do
children { [FactoryGirl.build(:child, :status=>1)] }
end
factory :child do
parent
end
和FactoryGirl.create的结果
FactoryGirl.create(:parent) #=> SystemStackError: stack level too deep
FactoryGirl.create(:child) #=> SystemStackError: stack level too deep
我想解决这些错误。 我尝试了几件事,但我无法解决它们。 在这种情况下,我怎样才能创建父母和子工厂?
你有什么想法吗?
谢谢!
答案 0 :(得分:0)
问题出在您的工厂:
我在上面的代码中,我创建了一个父项,它将创建一个再次创建父对象的子项。这会递归地发生,因为你得到“Stack?Level Too Deep”错误。 同样适合孩子。
也许你应该尝试这个
工厂:父母做| p |
p.sequence(:name){| n | “John#{n}”}
端
工厂:孩子做| c |
c.parents {| parents | [parents.association(:parent)]}
结束