2017-02-04 4 views
1

저는 몇 시간 동안 클래스 또는 스코프 메서드를 개발하려고 애 쓰고 있지만 SQLite에 대한 초보자 지식이 있습니다. 시도하고 읽은 모든 것이 지금까지 실패했습니다.인스턴스 메서드의 값을 기반으로 개체를 정렬하는 클래스/범위 메서드를 만드는 방법은 무엇입니까?

나는 그들의 평균 등급에 의하여 명부를 주문하는 방법을 찾고있다.

나는 List와 Rating 사이에 has_many/belongs_to 연관이있다. 목록 have_many 등급, 각 목록 have_many 등급하실 수 있습니다. 지금 그들의 평균 평가하여 목록을 주문할 수있는 방법을 찾기 위해 노력하고있어,하지만 어떤 성공을 가지고 있지 않다

def average_rating 
    self.ratings.average(:rating).to_i 
end 

: 나는 다음 목록의 평균 등급을 계산하는 인스턴스 메소드가 있습니다. 다른 게시물에 이어이 방법을 시도해 보았습니다.

그러나 단순히 특정 순서없이 모든 목록을 반환합니다. 이 쿼리와 함께 :

SELECT AVG("ratings"."rating") FROM "ratings" WHERE "ratings"."rated_id" = ? 

나는 목록 모델에 대한 속성을 AVERAGE_RATING하고 생각했지만, 심지어의 범위 방법을 개발하는 어려움이 있었다. 조언이나 도움을 제공 할 수 있다면 크게 감사하겠습니다!

답변

1

먼저 모든 값으로 쿼리 결과를 정렬 할 수 있습니다. 평균 등급으로 정렬하려고 할 때 지금처럼 하시길 바랍니다

List.all.sort_by(5) # you sort by result of the method which is simple number 

큰 의미는 아닙니다.

List 모델에 average_rating 열을 추가해야한다고 생각합니다. 당신은 당신의 평균 평가 점수는 콜백 새로운 만들 때마다 사용할 수를 계산하기 위해 모든 목록 평균 등급을 계산하고 열에서 그 값을 저장 한 다음이

def self.highest_rating 
    List.all.order(average_rating) 
end 

같은 그 열을 기준으로 목록을 정렬 할 수있을 것입니다 평가. 모양은 다음과 같습니다.

class Rating < ActiveRecord::Base 
    after_save :calculate_average 

    private 
    def calculate_average 
     #your code 
    end 
end 
+0

감사합니다. 나는 당신이 제안한 것처럼 속성을 추가 할 것이다. – Dog