【问题标题】:Recursive association with FactoryGirl与 FactoryGirl 的递归关联
【发布时间】:2012-05-20 20:17:13
【问题描述】:

我有一个category 模型。我正在使用祖先 gem 使它像一个树结构,这样我们就可以有子类别。我有一个简单的 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

我在这里要做的是将businessmain_sub_category 分配一个新类别sub_category,并将该category 的父级分配给业务的main_category

为此,我创建了一个名为 sub_category 的新工厂 工厂:类别做 序列(:名称){|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】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多