je le code suivant dans mon contrôleur:Pourquoi mon code génère-t-il une requête supplémentaire?
@unanswered_questions = Question.unanswered_with_tag(params[:tag_id]).paginate(per_page: 10, page: params[:page])
Ce qui appelle cette méthode dans mon Question
modèle:
def self.unanswered_with_tag id
joins(:taggings).where(taggings: { tag_id: id }).where(questions: { num_answers: 0})
end
J'attends une requête SQL qui va chercher les 10 premières questions sans réponse sur cette page, mais mes journaux montrent 2 requêtes:
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]]
^^ Notez la partie LIMIT 1
.
Et la seconde requête:
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]]
qui a LIMITE 10.
Pourquoi ce comportement?
Avez-vous essayé de combiner vos clauses '.where'? – Eric
Note sur 'ORDER BY" questions "." Id "ASC' partie - le code fourni n'a pas de commande, vous devez trouver le code qui fait la commande. Il pourrait y avoir un ordre implicite par id quand vous appelez 'first' sur une relation. – MikDiet