0

我有一个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的父级。categorymain_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

我对类别名称进行了唯一性验证。

任何人都有过这种递归工厂问题的帮助。

谢谢

4

1 回答 1

0

解决了,由于某种神秘的原因,我不明白我的测试数据库已经有一个名为 Category1 的类别的条目,它正在创建问题,使用 mysql 控制台手动删除了该行,现在一切正常。

我仍然想知道为什么数据库不清楚,因为我从不直接写测试数据库,它是执行它的测试用例..:S

于 2012-05-20T20:36:28.873 回答