1

我有一个非常简单的表格,因为我现在只是在玩 RoR,只是收集一些数据并将其放入数据库,没有什么令人兴奋的只是基本的 CRUD。但是,我想在表格的页脚中放置一个总和字段,但我在网上找不到任何接近的东西。这在 RoR 中是不可能的吗?似乎是一个非常简单的任务,但我确信我在 Rails 中的新手无论如何都没有帮助。:)

<tbody>
    <% @labors.each do |labor| %>
      <tr>
        <td><%= labor.employee %></td>
        <td><%= labor.item_no %></td>
        <td><%= labor.customer_number %></td>
        <td><%= labor.customer_name %></td>
        <td><%= labor.total_labor %></td>
        <td><%= labor.burden %></td>
        <td><%= labor.hours %></td>
        <td><%= link_to 'Show', labor %></td>
        <td><%= link_to 'Edit', edit_labor_path(labor) %></td>
        <td><%= link_to 'Destroy', labor, method: :delete, data: { confirm: 'Are you sure?' } %></td>
      </tr>
      <tr>
      <td>Sum</td>
        <td><%= @labors.map{|item| item.val}.reduce{0, :+} %></td>
      </tr>
    <% end %>
  </tbody>

不断收到由“,”引起的语法错误。

app/views/labors/index.html.erb:35: syntax error, unexpected ',', expecting '}'
4

3 回答 3

1

假设您的数据在一个数组中@items,并且每个项目都包含一个值属性“val”,那么在您循环呈现项目之后,添加另一个表格行,例如

<tr>
  <td>Sum</td>
  <td><%= @lobors.map{|item| item.total_labor}.reduce(0, :+) %></td>
</tr>

map用于提取要求和的值,reduce用于计算数组的和。

于 2013-07-18T22:20:22.317 回答
1

改变这个

<td><%= @labors.map{|item| item.val}.reduce{0, :+} %></td>

<td><%= @labors.map{|item| item.val}.reduce(0, :+) %></td>

希望这对你有用!

干杯!

于 2013-07-19T15:16:30.813 回答
0

好的,所以这些都是关于如何工作的。让我分解一下我是如何到达那里的:

我的代码:

<tbody>
    <% @labors.each do |labor| %>
      <tr>
        <td><%= labor.employee %></td>
        <td><%= labor.item_no %></td>
        <td><%= labor.customer_number %></td>
        <td><%= labor.customer_name %></td>
        <td><%= labor.total_labor %></td>
        <td><%= labor.burden %></td>
        <td><%= labor.hours %></td>
        <td><%= link_to 'Show', labor %></td>
        <td><%= link_to 'Edit', edit_labor_path(labor) %></td>
        <td><%= link_to 'Destroy', labor, method: :delete, data: { confirm: 'Are you sure?' } %></td>
      </tr>
      <tr>
      <td>Sum</td>
        <td><%= @labors.map{|item| item.val}.reduce{0, :+} %></td>
      </tr>
    <% end %>
  </tbody>

好的,原来这是@Martin 建议的代码,我一直收到关于“,”的错误。所以@Pamio 建议我在 () 中输入 '0, :+' 然后我得到一个 .val 错误。这实际上使我进入了解决方案。

.val 必须是您想要总计的实际字段,我怀疑这是因为它在一个数组中,而且在大多数情况下 .val 没有值。所以,代码最终是这样的:

    <tbody>
    <% @labors.each do |labor| %>
      <tr>
        <td><%= labor.employee %></td>
        <td><%= labor.item_no %></td>
        <td><%= labor.customer_number %></td>
        <td><%= labor.customer_name %></td>
        <td><%= labor.total_labor %></td>
        <td><%= labor.burden %></td>
        <td><%= labor.hours %></td>
        <td><%= link_to 'Show', labor %></td>
        <td><%= link_to 'Edit', edit_labor_path(labor) %></td>
        <td><%= link_to 'Destroy', labor, method: :delete, data: { confirm: 'Are you sure?' } %></td>
      </tr>

    <% end %>
  </tbody>
</table>
<h3>Sum</h3>
<div><span>Total Labor: </span><%= @labors.map{|item| item.total_labor}.reduce(0, :+) %></div>

注意 item.val 更改为 item.total_labor 我想要总计的实际字段名称。感谢您的洞察力,我很感激。

编辑格式略有变化..我的原始帖子每次循环时都会添加一个总字段。:) 哎呀!

于 2013-07-19T15:28:40.857 回答