2012-01-21 6 views
0

레일 3.1레일 : 생성 후 여러 데이터베이스 항목의 평균을 계산하는 방법

나는 내 질문에 응용할 수 있도록 간단하게 만들 것이다. 나는이를 저장하는 열 "ITEM_ID"각 항목에 대해 "평가"

싶습니다있다 항목 및 리뷰

항목 열 "AVERAGE_RATING"을 가지고 있으며, 리뷰 :

나는 두 개의 테이블이 해당 리뷰의 평균 평점. 나는 그것을 알아낼 수는 없지만 제가하고 싶은 것은 뭔가를 추가처럼, 내가 느끼는 만들고 업데이트의 라인을 따라 리뷰 컨트롤러에서 방법 :

@review = Review.find(params[:id]) 
@item = Item.find(@review.Item_ID) 

reviews_to_sum = Reviews.find_by_item_id(@item.id) 
@item.Average_Rating = reviews_to_sum.Rating.sum/reviews_to_sum.count 

나는 그러나, 인식, 위의 그 아마 정확하지 않다 ... 나는 초보자이고 나는 붙어있다.

그리고 나는 여러 가지 이유로 그것을 필요할 때 계산하는 것과는 반대로 Average_Rating을 데이터베이스에 저장하려고합니다.

+0

여기서 'Item_ID'와 같은 열 이름을 얻습니까? ActiveRecord는 기본적으로'item_id'를 선호하며 메서드는 동일합니다. 루비의 대문자 사용은 일반적으로 상수를 나타냅니다. – tadman

+0

그래, 나는 원래 데이터베이스 구조를 만들 때 생각하지 않았기 때문에 그들을 대문자로 만들었습니다. 나는 그것들 모두를 소문자로 옮길 수 있지만 대문자 표기법은 정말로 문제인가 아니면 단지 비표준인가? –

+0

이제는 현재와 미래에 대해 불규칙적 인 것으로 눈에 띄게 될 것입니다. 표준화를 빨리 마칠수록 더 좋습니다. 곡식에 맞서 싸울 좋은 이유가 항상 있어야합니다. 또한 모든 관계에서 외래 키 매개 변수를 재정의 할 필요가 없음을 의미합니다. – tadman

답변

3
class Item < ActiveRecord::Base 
    has_many :reviews 
end 

class Review < ActiveRecord::Base 
    belongs_to :item 

    after_save do 
    item.update_attributes average_rating: item.reviews.average(:rating) 
    end 
end 
+0

당신은 천재입니다. 자신이하는 일을 실제로 알고있을 때 레일 코드가 얼마나 명확한지를 결코 놀라게하지 않습니다. 나는 언젠가 실제로 내가하고있는 일을 알기를 바랍니다! 다시 한 번 감사드립니다! –

관련 문제