2013-03-18 156 views
2

我試圖平均特定類別內的分數。我有一張表格,其中包含導演,電影,流派,評分和評分列表。當用戶點擊一部電影時,我希望他們能夠看到該類型中所有其他電影的平均分數。Rails計算並顯示平均值

我認爲我必須結合條件使用平均法。這就是說,我一直無法在網上找到關於這個特定主題的有用文檔。如果有人能夠指導我解釋如何根據條件計算平均值並在視圖中顯示它們的指南或文章的方向,我將不勝感激!

+1

也許http://stackoverflow.com/questions查詢/ 984995/ruby​​-on-rails-field-average – Agis 2013-03-18 20:42:25

回答

4
與其他計算

總之,ActiveRecord的提供了一個名爲average方法。您可以通過實現像這樣使用它:

class Movie 
    def self.average_by_genre(genre) 
    average(:rating).where(:genre => genre) 
    end 
end 

另外,您還可以實現它作爲電影模型的實例方法。

class Movie 
    def average_rating 
    self.class.average(:rating).where(:genre => self.genre) 
    end 
end 

這會讓你直接從你的視圖調用方法。

<article> 
    <header> 
    <h1><%= @movie.title %></h1> 
    </header> 
    <p> 
    <span>Average rating for genre <%= @movie.genre %>:</span> 
    <%= @movie.average_rating %> 
    </p> 
</article> 
+0

這太棒了,謝謝!如何在視圖中顯示這個平均值? – bork121 2013-03-18 21:00:12

+0

您是否認爲應該在模型,視圖或裝飾器中計算平均值? – 2014-11-14 04:03:18

0

你怎麼樣移動SQL原始查詢到database view

# movies_view 
SELECT m.id, AVG(m.score) avg_score, c.category_id 
FROM movies m 
JOIN category c 
ON m.category_id 

所以,你需要從MovieView

MovieView.find(:movie_id).avg_score