Rails计算并显示平均值

我试图在特定类别中平均得分。 我有一张表,其中包含导演,电影,流派,评分和分数列表。 当用户点击电影时,我希望他们能够看到该类型中所有其他电影的平均分数。

我认为我必须将平均方法与条件结合使用。 这就是说我无法在网上找到有关这个特定主题的任何有用文档。 如果有人能指出我的指导方针或文章,解释如何计算有条件的平均值并在视图中显示它们,我将非常感激!

与其他计算一起,ActiveRecord提供了一种称为平均值的方法。 您可以通过实现以下内容来使用它:

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

或者,您也可以将其实现为Movie模型的实例方法。

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

这样您就可以直接从视图中调用该方法。

 

<%= @movie.title %>

Average rating for genre <%= @movie.genre %>: <%= @movie.average_rating %>

一些原始SQL怎么样?

 SELECT AVG(score) FROM movies WHERE category_id = 42 

或者在铁轨中:

 Movie.where(category_id: 42).average("score") 

在这里阅读更多信息: http : //guides.rubyonrails.org/active_record_querying.html#average

如何将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