2015-06-07 47 views
-1

我此行我的代碼:爲什麼ActiveRecord查詢在Rails 3和Rails 2中有不同的SQL輸出?

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

當調用Rails的Ruby的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 

但是,從調用它時Rails 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.9.3代碼中獲得1.8.7行爲?

+0

相同版本的導軌?這很奇怪,但你看到了不同的結果嗎? – agmcleod

+0

對不起,沒有。 1.8.7在rails 2.3.2上,1.9.3在3.2.8上 –

+1

難道你不希望兩個非常不同的Rails版本可能會以一種稍微不同的方式與數據庫交互嗎?你爲什麼認爲Ruby版本會影響這個? –

回答

1

嘗試更改joinsincludes

+0

相同的結果:-( –