2016-11-27 81 views
0

我在我的控制器下面的代碼:爲什麼我的代碼會生成額外的查詢?

@unanswered_questions = Question.unanswered_with_tag(params[:tag_id]).paginate(per_page: 10, page: params[:page]) 

這在我Question模型調用此方法:

def self.unanswered_with_tag id 
    joins(:taggings).where(taggings: { tag_id: id }).where(questions: { num_answers: 0}) 
end 

我想到一個SQL查詢,獲取該網頁上的前10個懸而未決的問題,但我的日誌顯示2查詢:

Question Load (0.4ms) SELECT "questions".* FROM "questions" 
INNER JOIN "taggings" ON "taggings"."question_id" = "questions"."id" 
WHERE "taggings"."tag_id" = $1 AND "questions"."num_answers" = $2 
ORDER BY "questions"."id" ASC LIMIT $3 OFFSET $4 
[["tag_id", 3], ["num_answers", 0], ["LIMIT", 1], ["OFFSET", 0]] 

^^請注意LIMIT 1部分。

而第二個查詢:

SELECT "questions".* FROM "questions" INNER JOIN "taggings" 
    ON "taggings"."question_id" = "questions"."id" 
    WHERE "taggings"."tag_id" = $1 AND "questions"."num_answers" = $2 
    LIMIT $3 OFFSET $4 
    [["tag_id", 3], ["num_answers", 0], ["LIMIT", 10], ["OFFSET", 0]] 

其中有LIMIT 10

爲什麼這種行爲?

+0

您是否嘗試過將'.where'子句組合起來? – Eric

+0

關於ORDER BY問題的注意事項「」ID「ASC」部分 - 所提供的代碼沒有排序,您需要找到排序的代碼。雖然在關係上調用'first'時,可能會有id的隱式排序。 – MikDiet

回答

0

您是否在視圖中運行代碼來檢查@unanswered_questions是否有任何行(例如#exists?)以顯示值或不顯示值?

相關問題