-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行爲?
相同版本的導軌?這很奇怪,但你看到了不同的結果嗎? – agmcleod
對不起,沒有。 1.8.7在rails 2.3.2上,1.9.3在3.2.8上 –
難道你不希望兩個非常不同的Rails版本可能會以一種稍微不同的方式與數據庫交互嗎?你爲什麼認爲Ruby版本會影響這個? –