与FactoryGirl的递归关联

问题描述 投票:0回答:1

我有一个category模型。我正在使用祖先宝石使其像树状结构,以便我们可以有子类别。我有一个category的简单工厂,看起来像这样

factory :category do
  sequence(:name) { |n| "Category #{n}"}
end

我有另一个型号business,它具有main_categorysub_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_categorybusiness分配一个新类别,即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

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

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

谢谢

ruby-on-rails ruby-on-rails-3 activerecord factory-bot
1个回答
0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.