1

現時点では、RoR で実際に遊んでいるだけなので、非常に単純なフォームがあります。データを収集して DB に入れるだけで、基本的な CRUD だけでエキサイティングなことは何もありません。ただし、テーブルのフッターに合計フィールドを配置したいのですが、Web 上でさえ何も見つかりません。これは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

これを変える

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

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

これがうまくいくことを願っています!

乾杯!

于 2013-07-19T15:16:30.813 に答える
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 に答える
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 に答える