0

次のようなモデル設定があります。

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 を持たないサブジェクトを返します

SubSubject モデルは次のとおりです。

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
4

1 に答える 1