2012-01-21 9 views
0

Rails 3.1Rails:作成後に複数のデータベースエントリを平均化する方法

私の質問に答えるためにアプリケーションを簡略化します。

私は2つのテーブルがあります:アイテムとレビュー

アイテムが列「AVERAGE_RATING」とレビューは、各項目の列「ITEM_ID」と「評価」

を持って、私が保存したい持っています対応するレビューの平均評価私はそれを把握することはできませんが、私は私が何をしたいかのように感じるの線に沿っクチコミコントローラで作成および更新方法に何かを追加です:

@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'を好んでおり、メソッドは同じです。 Rubyでの大文字の使用は、一般的に定数を指します。 – 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

あなたは天才です。あなたが何をやっているのかを実際に知っているときに、どのようにコードが明確になるか私を驚かせることは決してありません。私はいつか私がやっていることを実際に知りたいです!再度、感謝します! –

関連する問題