2014-10-20 17 views
0

我有一個模型設置如下所示:default_scope行不通的作用域

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與Subject自己的屬性,並能正常工作,以及

我不能搞清楚什麼是錯的,請幫

編輯:

的SQL查詢軌進行,當我做SubSubject.joins {}受.order( 'subjects.order_number')是:

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 

回答

0

運用this問題的答案,我不得不幾乎手動編寫SQL並用一點點不同的方法:

default_scope { where('subjects.id NOT IN (SELECT DISTINCT(
         backgroundable_job_id) FROM background_jobs)') }