如何在 rails 上 ruby 中的 factorybot 的 'callback' 函数中访问子 class 而不是父 class?

How can I access to a child class instead of parent class in a 'callback' function of factorybot in ruby on rails?

我在 ROR 中实施了 STI。请看下面的代码:

class Category < ApplicationRecord
end

class CourseCategory < Category
  has_many :courses
end

我使用 FactoryBot 创建这样的数据:

# category

FactoryBot.define do
  factory :category do
    name {"Ruby on Rails"}
  end
end

# course_category

FactoryBot.define do
  factory :course_category, parent: :category, class: 'Category' do
    trait :with_course do
      after(:create) do |course_category| # my problem is here
      create :course, :with_steps, course_category: course_category
    end
  end
end

# course

FactoryBot.define do
  factory :course do
     course_category
  end
end

当我 运行 FactoryBot.create(:course_category, :with_course) 进入 trait :with_course 时,我应该有 CourseCategory class,但我收到 类别.

我可以访问父 class 而不是子 class 进入 FactoryBot 的回调吗?

你的工厂正在建造 :course_category 作为错误的 class。

此行需要更改...

factory :course_category, parent: :category, class: 'Category' do

进入...

factory :course_category, parent: :category, class: 'CourseCategory' do