STI vs polymorphic, the associations not working

53 Views Asked by At

I have models:

class Course < ApplicationRecord
 has_one :survey, as: :surveyable, dependent: :destroy

 self.inheritance_column = "course_type"
   class << self
    def sti_name
      key_enum = name.split(base_class.name).last.underscore
      store_full_sti_class && store_full_class_name ? course_types[key_enum] : course_types[key_enum].demodulize
    end

    def sti_class_for type_name
      super "Course#{type_name.classify}"
    end
  end
end

class CourseOffline < Course
end

class Survey < ApplicationRecord
 belongs_to :surveyable, polymorphic: true, optional: true
end

when i use CourseOffline.last.survey or Course.last.survey (course_type is "Offline") then i got query:

 CourseOffline Load (0.5ms)  SELECT "courses".* FROM "courses" WHERE "courses"."course_type" = $1 AND "courses"."deleted_at" IS NULL ORDER BY "courses"."id" DESC LIMIT $2  [["course_type", 1], ["LIMIT", 1]]
 Survey Load (0.3ms)  SELECT "surveys".* FROM "surveys" WHERE "surveys"."deleted_at" IS NULL AND "surveys"."surveyable_id" = $1 AND "surveys"."surveyable_type" = $2 LIMIT $3  [["surveyable_id", 162], ["surveyable_type", "Course"], ["LIMIT", 1]]

my expect surveyable_type is "CourseOffline" not "Course"

0

There are 0 best solutions below