У меня есть следующий код в мой контроллер:Почему мой код генерирует дополнительный запрос?
@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]]
Который имеет предел 10.
Почему такое поведение?
Вы пробовали комбинировать свои предложения '.where'? – Eric
Замечание по 'ORDER BY" questions "." Id "ASC' часть - код не имеет заказа, вам нужно найти код, который делает заказ. Там может быть неявный порядок по идентификатору, хотя при вызове 'first' on on. – MikDiet