0

私は2つのモデルを持ってBoardおりCategory、関係はhas_many/belongs_toです。

コールバックで、デフォルトのカテゴリを作成していますBoardafter_createしたがって、ボードを作成すると、デフォルトのカテゴリが自動的に作成されます。

after_create do 
  categories.create(name: "All Links", description: nil)
end

ここで、基本的な :board ファクトリを作成します。

factory :board do
  name {Faker::Lorem.sentence(rand(5)+1)}
  description {Faker::Lorem.paragraph(rand(5))}
end

このデフォルト カテゴリを返す Board インスタンス メソッド: root_category があります。

私の質問は、この :board.root ファクトリと #root_category メソッドに基づいて :category ファクトリを作成するにはどうすればよいですか? 何かのようなもの:

factory :category do
  1. board = FactoryGirl.create(:board)
  2. returns board.root_category as a factory output.
end
4

1 に答える 1

1

あなたの質問は直接解決できますが、解決策よりも懸念事項があります。

あなたの質問に正確に答えるために、ボードのルートカテゴリを作成するために「カテゴリ」ファクトリは必要ありません。コールバックはモデル レベルで実行されるため、FactoryGirl に干渉する必要はありません。

いくつかのより多くの懸念

  1. 外部モデル/クラスでコールバックを使用することはお勧めできません。カテゴリは Board の外部にあるため、Board はプライベート スペースと想定されるコールバックで Category を呼び出すべきではありません。代わりに、BoardsController の #create でルート カテゴリをボードに追加することをお勧めします。

  2. モデリングを再考する必要があるかもしれません。常識的には、モデルとそのカテゴリは、多対多の関係で優れています。あなたの場合、ボードに「コーディング」カテゴリがあり、「コーディング」カテゴリをモデリングの他のボードで使用できなくなったとします。

于 2013-07-12T17:27:59.283 に答える