【发布时间】: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
我在这里要做的是将business 的main_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