Ruby on Rails总共在表格页脚中

时间:2013-07-18 21:32:36

标签: javascript ruby-on-rails

我有一个非常简单的形式,因为我现在真的只是在玩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 '}'

3 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

更改此

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

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

希望这适合你!

干杯!

答案 2 :(得分: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我想要的实际字段名称。感谢您的见解,我很感激。

在格式化方面略有改动。我的原始帖子每次循环时都会添加一个总字段。 :) oops!