我有一个category
模型。我正在使用祖先 gem 使它像一个树结构,这样我们就可以有子类别。我有一个简单的工厂category
,看起来像这样
factory :category do
sequence(:name) { |n| "Category #{n}"}
end
我有另一个business
具有 amain_category
和 a 的模型sub_category
。这是我的工厂
factory :business do
sequence(:name) { |n| "businnes#{n}"}
sequence(:email) { |n| "busixy#{n}@example.com"}
sequence(:website) { |n| "www.example#{n}.com"}
association(:main_sub_category)
main_category {Business.main_sub_category.parent}
end
我在这里要做的是分配main_sub_category
一个business
新类别,即 a并将其分配给业务sub_category
的父级。category
main_category
为此,我创建了一个名为 sub_category factory 的新工厂:category do sequence(:name) { |n| "Category #{n}"} 工厂 :subcategory do |sub| sub.parent factory :category end end
当我尝试上面的代码时,我得到了这个错误
Factory already registered: category (FactoryGirl::DuplicateDefinitionError)
我尝试了另一种方法来做到这一点
factory :category do
sequence(:name) { |n| "Category #{n}"}
factory :subcategory do |sub|
sub.parent {FactoryGirl.create(:category)}
end
end
这种方式可以工作,但是当我使用工厂创建业务对象时
@business = FactoryGirl.create :business
它给了我验证错误
ActiveRecord::RecordInvalid: Validation failed: Name has already been taken
我对类别名称进行了唯一性验证。
任何人都有过这种递归工厂问题的帮助。
谢谢