2015-05-06 2 views
1

Моя проблема в том, что я использую этот запрос:Избегайте eager_loading при доступе к соотношению

@questions = Question.includes(:answer).joins('LEFT OUTER JOIN answers ON answers.question_id = questions.id AND answers.user_id= 1').select('answers.*, questions.*') 

И тогда он производит эти 2 MySQL запросов. Проблема заключается в том, что второй запрос запрашивает ответы для каждого пользователя.

1.Question Load (2.7ms) SELECT answers.*, questions.* FROM "questions" LEFT OUTER JOIN answers ON answers.question_id = questions.id AND answers.user_id= 1 
2.Answer Load (0.8ms) SELECT "answers".* FROM "answers" WHERE "answers"."question_id" IN (2, 3, 4, 5, 6, 7, 8, 1) 
+0

Что вы на самом деле хотите сделать? –

+0

Получите ответы на все вопросы и их отношение «ответ» Но мне нужен только ответ от конкретного пользователя. – bokzor

+0

@questions = @ user.answers.includes (: questions) .collect (&: questions) .flatten –

ответ

1

Второй запрос выборки ответов не для каждого пользователя. Он извлекает их для всех вопросов (смотрите условие в запросе). Если вы хотите избежать этого, просто удалите includes или попробуйте добавить условия, как описано here.

+0

Да, но уже получил ответы с первым запросом. Но есть ли у вас какие-либо подсказки о том, как это сделать? Я застрял на нем с 2 дней ... Я хочу, чтобы все вопросы отвечали от конкретного пользователя. – bokzor

+0

Я хочу добавить предложение where во втором запросе. Потому что, если я добавлю его на первый, вопрос без ответа не будет выбран – bokzor

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