获取每个对象的平均评分

时间:2013-02-21 14:17:32

标签: ruby-on-rails ruby-on-rails-3 scopes

对于大多数人来说可能是一个简单的问题,但仍然掌握着数据库查询。我有可以给出评级的食谱,我现在想要收集这些评级并获得平均评级。食谱有很多评级(我认为这是正确的关系)

我创建了一个像这样的范围

class Recipe < ActiveRecord::Base
belongs_to :user
has_many :ratings
attr_accessible :country, :description, :name
scope :average_rating,includes(:ratings).group('recipe_id').where('AVG(ratings.rating)');
end

评级模型

class Rating < ActiveRecord::Base
has_many :users
attr_accessible :ratings, :recipe_id, :user_id
end 

我的评分还应包括has_many:食谱吗?

在我的控制器中,我创建了一个实例变量来显示结果

@avgrating = Recipe.average_rating

但坚持如何在我的视图中显示这个块,例如在我的索引中,控制器只是

 @recipes = Recipe.all

和视图

<% @recipes.each do |recipe| %>
<tr>
<td><%= recipe.name %></td>
<td><%= recipe.description %></td>
<td><%= recipe.country %></td>
<td>Avg Rating =<%= not sure here %></td>
</td>
</tr>
<% end %>

当我看到答案时,我确实感到愚蠢,但是现在无法想到如何做到这一点

由于

2 个答案:

答案 0 :(得分:7)

尝试<td>Avg Rating =<%= recipe.ratings.average(:ratings) %></td>

答案 1 :(得分:1)

试试这个:

  recipe.ratings.average(:ratings)

  <% ratings = recipe.ratings %>
  <%= ratings.map(&:ratings).sum/ratings.count %>