2015-06-07 1 views
-1

У меня есть эта линия в моем коде:Почему этот запрос ActiveRecord имеет разный вывод SQL в Rails 3 vs Rails 2?

@total = FeedbackAnswer.count(:conditions => feedback_answers_conditions, 
:joins => [:question, :feedback, {:feedback => :course}], 
:group => 'question_id, courses.id').size 

При вызове этой линии в Rails 2.3.2 на Руби 1.8.7 запрос, который я получаю это:

SELECT count(*) AS count_all, question_id AS question_id, courses.id AS courses_id 
FROM `feedback_answers` INNER JOIN `questions` 
ON `questions`.id = `feedback_answers`.question_id 
INNER JOIN `feedbacks` 
ON `feedbacks`.id = `feedback_answers`.feedback_id 
** INNER JOIN `feedbacks` feedbacks_feedback_answers 
ON `feedbacks_feedback_answers`.id = `feedback_answers`.feedback_id ** 
INNER JOIN `courses` 
ON `courses`.id = `feedbacks_feedback_answers`.container_id 
WHERE (1=1 and feedbacks.container_type = "Course" 
and (Date(courses.start_date) >= '2013-05-27') 
and (feedback_answers.lesson_id is null) 
and (feedback_answers.answer_grade > 0)) 
GROUP BY question_id, courses.id 

Но при вызове его из Рельсы 3.2.8 на Ruby 1.9.3 Я получаю:

SELECT COUNT(*) AS count_all, question_id, courses.id AS question_id_courses_id 
FROM `feedback_answers` INNER JOIN `questions` 
ON `questions`.`id` = `feedback_answers`.`question_id` 
INNER JOIN `feedbacks` 
ON `feedbacks`.`id` = `feedback_answers`.`feedback_id` 
INNER JOIN `courses` 
ON `courses`.`id` = `feedbacks`.`container_id` 
WHERE (1=1 and feedbacks.container_type = "Course" 
and (Date(courses.start_date) >= '2013-05-27') 
and (feedback_answers.lesson_id is null) 
and (feedback_answers.answer_grade > 0)) 
GROUP BY question_id, courses.id 

Разница обозначена знаком **.

Откуда это различие? Но самое главное, как мне получить поведение 1.8.7 в моем коде 1.9.3?

+0

Такая же версия рельсов? Странно, но вы видите другой результат? – agmcleod

+0

Извините, нет. 1.8.7 находится на рейлах 2.3.2, 1.9.3 на 3.2.8 –

+1

Не могли бы вы ожидать, что, возможно, две очень разные версии Rails могут взаимодействовать с базой данных несколько иначе? Почему, на ваш взгляд, версия Ruby влияет на это? –

ответ

1

Попробуйте изменить joins на includes.

+0

такой же результат :-( –

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