2013-02-04 3 views
1

을 표시 나는 다음과 같은 모델 각각 이전의 관련 아이 (I 간결 다른 모델 방법과 선언 제외)이 : 지금쿼리는 잘못을 여러 번

class Course < ActiveRecord::Base 
    has_many :questions 

    scope :most_answered, joins(:questions).order('questions.answers_count DESC') #this is the query causing issues 
end 

class Question < ActiveRecord::Base 
    belongs_to :course, :counter_cache => true 
    has_many: :answers 

end 

class Answer < ActiveRecord::Base 
    belongs_to :question, :counter_cache => true 
end 

를 I Course 만 채워져 있습니다 (콘솔 Course.all.count에서 실행하면 이됩니다). 내가 잘못 콘솔의 결과로 3를 얻을 첫 번째 Course는 현재 세 가지 questions 인구가있다,하지만 난 실행할 때 Course.most_answered.count (most_answered 위에서 볼 수 있듯이 Course로 작성 내 범위 방법이다). Rails guide on queries을 컨설팅하는 것뿐만 아니라 쿼리의 다양한 반복을 시도했지만 어떤 일이 잘못되었는지 파악할 수 없습니다. 미리 감사드립니다.

답변

3

내가 수집 할 수있는 것으로부터 가장 많이 응답 한 범위는 questions.answer_count의 합으로 주문하려고합니다.

sum이 없으므로 첫 번째 코스에는 세 가지 답변이 있으므로이 테이블에 가입하면 세 가지 결과가 생성됩니다. 당신은 명시 적으로 교육 과정을 지정해야합니다

scope :most_answered, joins(:questions).order('questions.answers_count DESC') 
    .select("courses.id, courses.name, ..., SUM(questions.answers_count) as answers_count") 
    .group("courses.id, courses.name, ...") 
    .order("answers_count DESC") 

당신이 GROUP BY 절에서 사용할 수 있도록 선택하려는 필드 : 당신이 할 필요가 무엇

는 다음과 같은 것입니다.

편집 :

내가 courses.id, courses.name, ...을 언급, 당신은 당신이 선택하려는 실제 열이이를 교체해야합니다 (선택과 그룹에서) 두 곳. 범위이므로 코스 테이블의 모든 필드를 선택하는 것이 가장 좋지만 개별적으로 지정해야합니다.

+0

감사합니다. 반복을 일으킨 이유를 설명했던 첫 번째 부분은 특히 도움이되었습니다. 코드를 복사하고 문법 오류가 발생하여 본인의 질문에 추가했습니다. 도와 줘서 고마워. – daspianist

+0

작은 물건이 복수형에서 단수형으로 바뀌거나 적어도 특정 요소를 가져와 최소한보기를 렌더링하는지 확인하는 등 작은 물건이 오류를 일으키지 않도록하여 진전을 시도했습니다. 불행히도 나는이 질문에 도움이되지 않았다. – daspianist

+1

'...'은 select 절에 추가해야하는 필드를 나타 내기위한 것이 었습니다. –