Ruby on rails 在Rails中,向表中添加总和的正确方法是什么?

Ruby on rails 在Rails中,向表中添加总和的正确方法是什么?,ruby-on-rails,activerecord,sum,Ruby On Rails,Activerecord,Sum,我正在显示一个HTML表中具有price属性的项目列表 获取总价格的正确方法是什么?添加表的末尾(计算应在哪里进行) 我能想到3种明显的方法,但我不知道哪一种是最“正畸的” 1-在控制器中 @items = Item.all @item_total = @items.sum(:price) 我只需在最后一行显示@item\u total <%= @items.sum(:price) %> <%= @items.inject(0){|s, e| s + e.price} %&

我正在显示一个HTML表中具有
price
属性的
项目列表

获取总
价格
的正确方法是什么?添加表的末尾(计算应在哪里进行)

我能想到3种明显的方法,但我不知道哪一种是最“正畸的”

1-在控制器中

@items = Item.all
@item_total = @items.sum(:price)
我只需在最后一行显示
@item\u total

<%= @items.sum(:price) %>
<%= @items.inject(0){|s, e| s + e.price} %>
2-在视图中,在最后一行

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

但我不确定在视图中这样做是否合适(它可以工作,但可以吗?)

3-在视图中,将其添加到最后一行

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

但在视图中添加这种逻辑是不对的

那么哪一个是正确的呢?还是我错过了另一条路?

试试这条路

# In your controller write
@item_total = Item.sum(:price)
@item\u total
在您的
视图中使用

更新

如果您使用类似于
索引的
操作,那么您可以这样做

@items = Item.all
@item_total = @items.sum(:price)
但是,如果您只想
item_total
,那么就不要传递两个查询,以获得您想要的总和

@item_total = Item.sum(:price)
这样试试

# In your controller write
@item_total = Item.sum(:price)
@item\u total
在您的
视图中使用

更新

如果您使用类似于
索引的
操作,那么您可以这样做

@items = Item.all
@item_total = @items.sum(:price)
但是,如果您只想
item_total
,那么就不要传递两个查询,以获得您想要的总和

@item_total = Item.sum(:price)

您应该使用第一个选项,因为视图应该包含最少的代码。
因此,只在控制器中使用您的代码。

您应该使用第一个选项,因为视图应该包含最少的代码。 因此,仅在控制器中使用代码。

@items=Item.all #这是数组#和,计算是在Ruby中完成的。通常很慢 @项目总数(:价格)
鉴于

@items=Item.all
#这是数组#和,计算是在Ruby中完成的。通常很慢
@项目总数(:价格)
鉴于


总是希望减少从数据库获取数据所需的查询数。。。。 您有两个选项来获取数据

@items=Item.all @项目总数=@items.sum(:价格)

这不会运行,因为应该有&:price而不是:price…如果由于不支持ARel而不鼓励使用这种风格的代码,那么情况就更糟了

因此,根据我的要求,您应该使用的代码

@items=Item.scoped @项目总数=@items.pull(:price)。总和(:price)


好处是@item是一个ARel对象,可以用于进一步的计算…

减少从数据库获取数据所需的查询数量总是可取的。。。。 您有两个选项来获取数据

@items=Item.all @项目总数=@items.sum(:价格)

这不会运行,因为应该有&:price而不是:price…如果由于不支持ARel而不鼓励使用这种风格的代码,那么情况就更糟了

因此,根据我的要求,您应该使用的代码

@items=Item.scoped @项目总数=@items.pull(:price)。总和(:price)

好处是@item是ARel对象,可以用于进一步的计算…

您可以尝试以下代码:

Sum Dolars: <%= @customer_reports.sum(&:mount) %>
Sum Dolars:
您可以尝试以下代码:

Sum Dolars: <%= @customer_reports.sum(&:mount) %>
Sum Dolars:

请使用良好的SO代码(缺少空格)修复您的帖子请使用良好的SO代码(缺少空格)修复您的帖子