Ruby 1.9.2, Rails 3.1을 사용하고 있습니다. 나는 다음과 같은 한 :오브젝트 배열을 숫자로 변환합니다.
# review.rb
def calculate_rating
all_rating = Review.select("rating").where("reviewable_id = ?", self.reviewable_id)
all_rating.inject(:+)
end
# reviews_controller.rb
def create
@reviewable = find_reviewable
@review = @reviewable.reviews.where("user_id = ?", current_user).first
if @review.save
@review.calculate_rating
redirect_to :id => nil
else
flash[:error] = 'Error saving review. Please try again.'
redirect_to :id => nil
end
end
이 뒤에 아이디어는 평가와 새로운 검토를 제출하고 저장 될 때, 그것은 모든 @reviewable
에 대한 모든 평가를 찾을 평가의 총 수에 의해 모든 등급 및 분할 합계 것입니다 . all_rating
오브젝트의 배열을 반환 all_rating = Review.select("rating").where("reviewable_id = ?", self.reviewable_id)
, 아래와 같이 :
[#<Review rating: #<BigDecimal:1050f0a40,'0.3E1',9(18)>>, #<Review rating: #<BigDecimal:1050f0928,'0.1E1',9(18)>>]
I 그것에 산술 연산을 수행 할 수없는 I가 현재 직면하고
문제점이 라인이다. inject
을 사용하여 합계를 계산하고 등급의 수로 나눌 수 있기 전에 숫자의 배열이 필요합니다.
나는 inject
작동시킬 수있는 방법을 나에게 알려 주시기 바랍니다. 많은 감사합니다!
을 나는 당신이 ('지도를 의미 생각 : 등급)'. – qerub
두 번째 경우에는'..). to_a.sum (& : rating)'이 될 수도 있습니다. 아마도 약간의 메모리가 절약 될 것입니다. –