首页 > 解决方案 > 如何在 Rails 中显示列的总和

问题描述

我想在我的模型 Earning 中显示列名“money”的总和。在 rails 控制台中,我可以轻松获得所需的总和Earning.sum(:money),并显示总和。

收益控制器.rb

def index
  @earnings = Earning.sum(:money)
end

index.html.erb

<p id="notice"><%= notice %></p>

<h1>Earnings</h1>

<table>
  <thead>
    <tr>
      <th>Money</th>
      <th colspan="3"></th>
    </tr>
  </thead>

  <tbody>
    <% @earnings.each do |earning| %>
      <tr>
        <td><%= earning.money %></td>
        <td><%= link_to 'Show', earning %></td>
        <td><%= link_to 'Edit', edit_earning_path(earning) %></td>
        <td><%= link_to 'Destroy', earning, method: :delete, data: { confirm: 'Are you sure?' } %></td>
      </tr>
    <% end %>
  </tbody>
</table>

<br>

<%= link_to 'New Earning', new_earning_path %>

它一直抛出这个错误

NoMethodError in Earnings#index

到目前为止我尝试过的

我难住了。我尝试将索引操作更改为@earnings = Earnings.sum(:money),这给了我这个错误“NameError in EarningsController#index”。我在这里也看到了类似的问题,但由于我认为问题出在我的 index.html.erb 中,因此并没有太大帮助。正如我之前所说,代码在 Rails 控制台中工作。预先感谢您的任何帮助。

标签: ruby-on-railsactiverecord

解决方案


因此,您没有以正确的方式使用@earnings,在您看来,您将收益用作对象的集合,但在控制器中,@earnings 被定义为一笔钱,但您并没有使用它,如果您真的需要这笔钱,您可以设置两个实例变量,例如 @earnings = Earning.all 和第二个 @money_sum = Earnings.sum(:money),然后您可以在某处显示您的总和为 = @money_sum,然后您可以通过 @earnings 迭代创建一些你认为的linka


推荐阅读