3

おそらくほとんどの人にとっては簡単な質問ですが、それでもデータベース クエリを理解する必要があります。評価を付けることができるレシピがあるので、それらの評価を収集して平均評価を取得したいと考えています。レシピには多くの評価があります(これは正しい関係だと思います)

私はそのようなスコープを作成しました

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 :recipes も含める必要がありますか?

私のコントローラーでは、結果を表示するインスタンス変数を作成しました

@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 %>

答えを見ると気分が悪くなると思いますが、今はどうすればいいのか考えられません

ありがとう

4

2 に答える 2

7

試す<td>Avg Rating =<%= recipe.ratings.average(:ratings) %></td>

于 2013-02-21T14:20:17.133 に答える
1

これを試して:

  recipe.ratings.average(:ratings)

また

  <% ratings = recipe.ratings %>
  <%= ratings.map(&:ratings).sum/ratings.count %>
于 2013-02-21T14:20:55.123 に答える