私は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)>>]
私はそれにすべての算術計算を行うことができない私は現在直面しています
問題は、このラインです。 inject
を使ってそれを合計し、評価の数で除算するには、数値の配列にする必要があります。
inject
をどのように動作させるか教えてください。どうもありがとう!
を私はあなたが(& 'マップを意味だと思います:評価) '。 – qerub
2番目のケースでは、 '..)。to_a.sum(&:rating)'もあり、おそらくメモリを節約します。 –