2016-11-27 1 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]] 

Который имеет предел 10.

Почему такое поведение?

+0

Вы пробовали комбинировать свои предложения '.where'? – Eric

+0

Замечание по 'ORDER BY" questions "." Id "ASC' часть - код не имеет заказа, вам нужно найти код, который делает заказ. Там может быть неявный порядок по идентификатору, хотя при вызове 'first' on on. – MikDiet

ответ

0

Вы используете код в своем представлении, который проверяет, есть ли у @unanswered_questions какие-либо строки вообще (#exists? Например) для отображения значений или нет?

Смежные вопросы