1

レコードの合計評価を計算するためのループを作成しました。これを行うには、最初にすべての子レコード(評価)をループし、各行から評価を抽出し、それを合計に追加してから、合計を出力します。

<% total = 0 %>
<% for ratings in @post.ratings %>
    <% total = (total + ratings.rating) %>
<% end %>
<%= total %>

私の質問は、単純に、これはレールの方法ですか?

5行必要ですが、目的の結果が得られます。私は他の言語の古い習慣を私のrailsプロジェクトに取り入れているのではないかと心配しており、もっと簡単な方法があるかどうか誰かが明らかにしてくれることを望んでいます。

4

3 に答える 3

3

以下は、できればコントローラーで、簡潔に行います。

@rating = @post.ratings.sum { &:rating }

それが不可解に思えるなら、あなたは好むかもしれません

@rating = @post.ratings.inject(0) { |sum, p| sum + p.rating }

ただし、評価のいずれかが null の場合、これは失敗することに注意してください。

@rating = @post.ratings.inject(0) { |sum, p| sum + (p.rating || 0) }
于 2013-02-17T07:05:55.127 に答える
1

通常、ビューからロジックを除外する必要があります。そのコードをヘルパーまたはコントローラーに配置し、メソッドを呼び出して合計を計算します

于 2013-02-17T06:30:41.837 に答える
0

コントローラーに次を入れてから@rating、ビューで使用するだけです。

total = 0
@rating = @post.ratings.each { |r| total += r.rating }

または、それを Post モデルに移動して、次のようにすることもできます。

def self.total_rating
  total = 0
  ratings.each { |r| total += r.rating }
  total
end

そして、単に呼び出す@post.total_rating

于 2013-02-17T06:44:47.103 に答える