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
爲什麼這種行爲?
您是否嘗試過將'.where'子句組合起來? – Eric
關於ORDER BY問題的注意事項「」ID「ASC」部分 - 所提供的代碼沒有排序,您需要找到排序的代碼。雖然在關係上調用'first'時,可能會有id的隱式排序。 – MikDiet