比較的複雑なモデルの工場を構築しようとしています。
私は Source に属する Pressroom モデルを持っており、Source には多くの Pressroom があります。Source の作成時に pressrooms が空の場合、最初の pressroom が after_create フィルターで作成されます。プレスルームのサイトは、ソースごとに一意である必要があります。
class Source
has_many :pressrooms
after_create :create_initial_pressroom! # if pressrooms.empty?
...
end
class Pressroom
belongs_to :source
# source.pressrooms.map(&:site) should have unique elements
validate_on_create :check_unique_site
end
これは私の問題につながりPressroom.make
ます.プレスルームを持たないソースを構築するため、after_create
コールバックが作成Pressroom.make
され、終了しようとするとそのサイトが一意ではないため、失敗します. 実行時に 2 つのプレスルームを作成したくないPressroom.make
これを解決するための私の試みは、プレスルーム ブループリントのソースの関連付けがプレスルームを参照するようにすることです。どういうことSource.create :pressrooms => [Pressroom.new]
だろう。
Pressroom.blueprint do
source { Source.make :pressrooms => [self] }
site { source.site }
end
残念ながら、self
まだプレスルームではありません。これは Machinist::Lathe のインスタンスなので、ActiveRecord::AssociationTypeMismatch 例外が発生します。
工場や機械工に関しては、私は少し初心者です。Pressroom.make
ビジネスロジックを変更する必要はなく、その過程で 2 つのプレスルームを作成することなく、きれいにプレスルームを作成できるようにしたいと考えています。factory-girl への切り替えが役立つなら、私はそれを受け入れます。
これを解決する方法についてのアイデアに感謝します。