0

HTML テーブルに属性itemsを持つリストを表示しています。price

テーブルの最後に合計priceを追加する正しい方法は何ですか (そして計算はどこで行われるべきですか)?

3つの明白な方法を考えることができますが、どれが最も「正統的」であるかはわかりません

1-コントローラーで

@items = Item.all
@item_total = @items.sum(:price)

@item_totalそして、最後の行に表示するだけです

2-ビューの最後の行

<%= @items.sum(:price) %>

しかし、ビューでこれを実行しても問題ないかどうかはわかりません (動作しますが、問題ありませんか?)

3-ビューで、これを最後の行に追加します

<%= @items.inject(0){|s, e| s + e.price} %>

しかし、この種のロジックをビューに追加するのは適切ではありません。

それで、これらのうちどれが正しいですか?または、私が見逃している別の方法はありますか?

4

5 に答える 5

1
@items = Item.all
# this is Array#sum, calculation is done in Ruby. usually slow
@items.sum(:price) 

一方

# this is Relation#sum -> does a calculation at DB. usually faster
Item.scoped.sum(:price) # OR Item.sum(:price)
于 2012-11-03T12:15:19.033 に答える
1

DB からデータをフェッチするために必要なクエリの数を減らすことは常に望ましいことです..データをフェッチするには 2 つのオプションがあります.

@items = Item.all @item_total = @items.sum(:price)

:price の代わりに &:price があるはずなので、これは実行されません...さらに、ARel がサポートされていないためにこのスタイルのコードが推奨されていない場合...

したがって、私によると、使用する必要があるコード

@items = Item.scoped @item_total = @items.pluck(:price).sum(:price)

利点は、@item が ARel オブジェクトであり、さらなる計算で使用できることです...

于 2012-11-03T12:27:59.607 に答える
0

この方法を試してください

# In your controller write
@item_total = Item.sum(:price)

ファイルで@item_total使用するview

アップデート

このようなindexアクションを使用すると、このようにすることができます

@items = Item.all
@item_total = @items.sum(:price)

ただし、必要item_totalな場合は、合計に2つのクエリを渡さないでください。次のようにすることができます

@item_total = Item.sum(:price)
于 2012-11-03T11:38:14.597 に答える
0

このコードを試すことができます:

Sum Dolars: <%= @customer_reports.sum(&:mount) %>
于 2013-08-06T21:52:58.150 に答える