0

私は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

カテゴリ名の一意性検証があります。

この種の再帰的なファクトリの問題のような助けがありました。

ありがとう

4

1 に答える 1

0

問題を作成していたCategory1という名前のカテゴリの単一のエントリがテストデータベースに既にあり、mysqlコンソールを使用してその行を手動で削除したことを理解していない不思議な理由で、解決しました。

なぜデータベースが明確でなかったのか、まだ疑問に思っています.test dbに直接それを行うテストケースを書いたことはありません.. :S

于 2012-05-20T20:36:28.873 に答える