我有一个category
模型。我正在使用祖先宝石使其像树状结构,以便我们可以有子类别。我有一个category
的简单工厂,看起来像这样
factory :category do
sequence(:name) { |n| "Category #{n}"}
end
我有另一个型号business
,它具有main_category
和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
分配一个新类别,即sub_category
,并将该category
的父级分配给企业的main_category
。
为此,我创建了一个名为sub_category的新工厂工厂:类别做sequence(:name){| n | “类别#{n}”}工厂:subcategory做| sub |子上级工厂:类别结束结束
当我尝试上述代码时,出现此错误
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
我对类别名称进行了唯一性验证。
任何人都有这种递归工厂问题的帮助。
谢谢
解决了它,由于某种神秘的原因,我不知道我的测试数据库已经有一个名为Category1的类别的条目,这正在创建问题,使用mysql控制台手动删除了该行,现在一切正常。] >
我仍然想知道为什么数据库不清楚,因为我从未写过直接测试DB的测试用例..:S