2014-10-31 37 views
0

我有三類:的Rails:find_by作出額外的SQL查詢,按以前包括

class Batch 
    has_many :final_grade_batches 
end 

class FinalGradeBatch 
    belongs_to :batch 
    belongs_to :student 
end 

class Student 
    has_many :final_grade_batches 
end 

我想檢索final_grade_batch方式如下:

batch = Batch.includes(:final_grade_batches).find(1) 
batch.final_grade_batches.find_by(student_id: 2) 

最終線生產這SQL查詢:

FinalGradeBatch Load (0.6ms) SELECT "final_grade_batches".* FROM "final_grade_batches" WHERE "final_grade_batches"."batch_id" = $1 AND "final_grade_batches"."student_id" = 2 LIMIT 1 [["batch_id", 1]] 

如果我在中包含 find查詢,爲什麼它再次尋找final grade batch?我知道它需要找到具有該學生ID的人,但是Rails應該通過查詢來獲取該ID?現在沒有加載到內存中嗎?

有沒有什麼辦法可以得到final grade batch沒有Rails再次擊中數據庫?謝謝!

回答

0

find_by總是進行數據庫查詢。使用替代它:

batch.final_grade_batches.select(|grade_batch| grade_batch.student_id == 2).first 

這適用於你已經從數據庫中,而不是做一個額外的查詢加載的陣列。