Привет, у меня есть следующие 3 модели:
Местоположение
StagingLocation <Местоположение </p>
Пакет
Я могу настроить ассоциации для создания действительной фабрики пакетов, просто вызвав фабрику StagingLocation вместо Location.Согласно следующему коду:
package_spec.rb:
describe "package validation" do
let(:package_location) { create(:staging_location) }
it "has a valid factory" do
expect( create(:package, location: package_location) ).to be_valid
end
Однако это не передаст FactoryBot.lint
1.lint выдает ошибку при создании Location
FactoryBot.define do
factory :location do
type { "StagingLocation" }
name { "Location" + Faker::GreekPhilosophers.unique.name }
end
end
, выдает эту ошибку
Механизм наследования одной таблицы не смог найти подкласс: '0'.Эта ошибка возникает из-за того, что столбец type зарезервирован для хранения класса в случае наследования.Пожалуйста, переименуйте этот столбец, если вы не намеревались использовать его для хранения класса наследования, или перезапишите Location.inheritance_column, чтобы использовать другой столбец для этой информации.(ActiveRecord :: SubclassNotFound)
2.Вызов фабрики staging_location завершается с
NoMethodError
, поскольку Package ищет местоположение
FactoryBot.define do
factory :package do
staging_location
name { "TEST-" + rand(99).to_s }
end
end
Я вижу три возможных способачтобы обойти это, но не могу найти синтаксис FactoryBot для их выполнения:
a) Создайте фабрику Location
b) Создайте фабрику StagingLocation, которая возвращает класс Location с использованием base_class метод или аналогичный
c) Скажите фабрике пакетов принять staging_location в качестве фабрики местоположений
d) Игнорировать ошибку, так как в конце дня мои фабрикисоздается как ожидалось.
Есть предложения?