我正在使用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 = Review.select("rating").where("reviewable_id = ?", self.reviewable_id)
其中all_rating
返回對象的數組,象下面這樣:
[#<Review rating: #<BigDecimal:1050f0a40,'0.3E1',9(18)>>, #<Review rating: #<BigDecimal:1050f0928,'0.1E1',9(18)>>]
我不能做任何算術計算它。我需要它是一組數字,然後才能使用inject
對它進行求和併除以評級數。
請告訴我如何讓inject
工作。非常感謝!
我想你的意思'地圖( :等級)'。 – qerub 2011-12-19 16:46:44
在第二種情況下也可能是'..)。to_a.sum(&:rating)',可能會節省一些內存。 – 2011-12-19 18:30:18