У меня есть две модели (ModelA и ModelB) и фабрики FactoryGirl для каждого. Я хочу, чтобы factory для ModelB мог (A) создавать тестовые данные и (B) создавать (без сохранения в базу данных) образцы данных для отображения клиентам. У меня возникли проблемы с получением (A) работы из-за проверки Rails в моих моделях.
Modela:
class ModelA < ActiveRecord::Base
belongs_to :model_b
validates_presence_of :model_b
end
Factory для ModelA:
FactoryGirl.define do
factory :model_a do
some_attr "hello"
model_b { FactoryGirl.build :model_b }
end
end
ModelB
class ModelB < ActiveRecord::Base
has_one :model_a
end
Factory для ModelB
FactoryGirl.define do
factory :model_b do
some_attr "goodbye"
end
end
Я не могу создавать объекты с этих фабрик без ошибок проверки:
ruby> FactoryGirl.create :model_a
ActiveRecord::RecordInvalid: Validation failed: ModelB can't be blank
Похоже, что FactoryGirl пытается сохранить объект factory перед сохранением его связей. Я понимаю, что я мог бы иметь factory для ModelB создать связанный с ним ModelA (а не создавать его), однако я бы потерял гибкость в возможности использовать ModelA factory для сборки данных образца или сохранения тестовых данных, В качестве альтернативы я мог удалить проверки; но тогда у меня не было бы валидаций.
Любые другие варианты?