私は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 factory :category do sequence(:name) { |n| という新しいファクトリを作成しました。"Category #{n}"} factory :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
カテゴリ名の一意性検証があります。
この種の再帰的なファクトリの問題のような助けがありました。
ありがとう