Hi,
I am working a project where subclasses (using STI) of an model have different relationships. Quick Example:
class Course < ActiveRecord::Base
has_many :learning_units, as: :container
end
class LearningUnit <ActiveRecord::Base
end
class LessonGroup < LearningUnit
belongs_to :container, polymorphic: true
has_many :lessons,
-> { where(container_type: LessonGroup.name) },
class_name: "Lesson",
foreign_key: "container_id"
end
class Lesson < LearningUnit
belongs_to :container, polymorphic: true
notice no lessons relationship
end
Everything works as expected except that when I try to do
course_instance.learning_units.includes(:lessons)
an exception is raised because one of the subclasses does not have a lessons
relationship.
This is where it happens: https://github.com/rails/rails/blob/4-1-stable/activerecord/lib/active_record/associations/preloader.rb#L147
Unless I am mistaken, there’s no configuration to change this behaviour. A possible fix would be to raise the exception only if none of the classes define the requested associations. Is there any chance such a change gets merged?
Any thoughts are more than welcome.