Я пишу базовые c тесты, чтобы определить проверки, сделанные на уровне моделей. Я использую Rspe c и FactoryBot. Модель BusinessObject может иметь 2 родителей: либо BusinessArea, либо BusinessProcess.
Извлечение модели BusinessObject:
# == Schema Information
#
# Table name: business_objects
#
# id :integer not null, primary key
# playground_id :integer not null
# main_scope_id :integer
# code :string(30) not null
# name :string(200) not null
# description :text
# area_process_type :string
# area_process_id :integer
class BusinessObject < ActiveRecord::Base
belongs_to :area_process, polymorphic: true
validates :area_process, presence: true
...
end
Извлечение модели BusinessArea:
class BusinessArea < ActiveRecord::Base
has_many :business_objects, as: :area_process
...
end
Извлечение модели BusinessProcess:
class BusinessProcess < ActiveRecord::Base
has_many :business_objects, as: :area_process
...
end
Фабрика:
FactoryBot.define do
factory :business_object do
association :area_process, factory: :business_area
name {"Test Business Object"}
code {"TEST_BO"}
description {"This is a test Business object used for unit testing"}
created_by {"Fred"}
updated_by {"Fred"}
owner_id {1}
status_id {0}
end
end
При запуске тестов Фабрика завершается ошибкой со следующим сообщением:
7 ) BusinessObject имеет действительную фабрику Сбой / Ошибка: ожидаемо (build (: business_object)). To be_valid
ActiveRecord::StatementInvalid:
PG::UndefinedColumn: ERROR: Column business_objects.business_area_id does not exist.
Как указать фабрике родительский элемент для использования в ассоциации?
Большое спасибо!