Я пытаюсь построить фабрики по относительно сложным моделям.
У меня есть модель Pressroom, которая принадлежит Source, а у Source есть много 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
Это приводит к моей проблеме: My Pressroom.make
терпит неудачу, потому что он создает источник, в котором нет пресс-цехов, поэтому обратный вызов after_create
создает его, и когда Pressroom.make
пытается завершить работу, его сайт не уникален. Я не хочу создавать два печатных цеха при запуске 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
, не создавая при этом два печатных цеха. Если переключение на фабричную девушку поможет, я открыт для этого.
Буду благодарен за любые идеи, как это решить.