我有如下模型设置:
class Subject
has_one :background_job, as: :backgroundable_job
has_many :sub_subjects
default_scope { includes(:background_job).where( background_jobs: { backgroundable_job_id: nil } ) }
end
default_scope 返回没有 background_job 的主题
这是主题模型:
class SubSubject
belongs_to :subject
scope :ordered, -> { joins { subject }.order('subjects.order_number') }
end
但是当我做 subject.sub_subjects.ordered 时,我收到以下错误:
PG::UndefinedTable: ERROR: missing FROM-clause entry for table "background_jobs"
LINE 1: ...ubjects"."id" = "sub_subjects"."subject_id" AND "backgroun...
当我调用 subject.subjects (没有订购)时,它就可以正常工作
我还尝试使用主题自己的属性设置 default_scope,它也可以正常工作
我无法弄清楚是什么问题,请帮助
编辑:
当我执行 SubSubject.joins{subject}.order('subjects.order_number') 时,rails 执行的 SQL 查询是:
SELECT "sub_subjects".* FROM "sub_subjects" INNER JOIN "subjects" ON "subjects"."id" = "sub_subjects"."subject_id" AND (background_jobs.backgroundable_job_id IS NULL) ORDER BY subjects.order_number