добавление в html с использованием ruby на рельсах

0

У меня есть таблица с полями цены и количества. Я хочу добавить количество цены * в общую сумму за каждый элемент, который я в конечном итоге добавлю в таблицу.

Мой код выглядит так.

<table>
                <thead>
                    <tr>
                      <th width="200">Name</th>
            <th width="150">Price</th>
                      <th>Quantity</th>
                      <th width="150">Total</th>
                    </tr>
          <% @item.each do |item| %>
          <tr>
            <td><%= item.name %></td>
            <td><%= item.price %></td>
            <td><%= item.quantity %></td>
            <td><%= item.quantity * item.price %></td>
            <td class="actions">
              <% link_to("update", :class => 'action update') %>
              <% link_to("X", :class => 'action delete') %>
            </td>
          </tr>
          <% end %>
                </thead>
            </table>

и моя общая сумма в виде ярлыка. Как мне это сделать? Существует ли статическая переменная в RoR?

  • 0
    Используйте базу данных для этих операций
  • 0
    Не забудьте принять ответ, если вас это устраивает. Это поможет авторам.
Теги:

3 ответа

2

Вы должны добавить поле grand_total в таблицу и создать обратный вызов в модели Item. Этот обратный вызов будет сохранять значение общей суммы в таблице каждый раз при создании нового элемента.

before_save : save_grand_total

def save_grand_total
  self.grand_total = self.quantity * self.price
end
0
<table>
            <thead>
                <tr>
                  <th width="200">Name</th>
        <th width="150">Price</th>
                  <th>Quantity</th>
                  <th width="150">Total</th>
                </tr>
     <% grand_total=0 %>
      <% @item.each do |item| %>
      <tr>
        <td><%= item.name %></td>
        <td><%= item.price %></td>
        <td><%= item.quantity %></td>
        <td><%= item.quantity * item.price %></td>
        <% grand_total+= item.quantity * item.price %>
        <td class="actions">
          <% link_to("update", :class => 'action update') %>
          <% link_to("X", :class => 'action delete') %>
        </td>
      </tr>
      <% end %>
            </thead>
        </table>
0

Вы можете использовать Enumerable#inject чтобы получить общую сумму следующим образом:

<% #= @item.inject{ |grand_total, quantity| grand_total + (quantity * cart.price) } %>

Обновить:

Пожалуйста, проигнорируйте приведенную выше строку кода, чтобы показать вам пример. Следующий пример кода должен решить вашу проблему.

Поместите следующую строку, в которой вы хотите отобразить общую сумму.

<%= label_tag 'grand_total', 
      @item.inject(0) { |grand_total, item| grand_total + (item.quantity * item.price) } %>

@item.inject(0){ |grand_total, item| grand_total + (item.quantity * item.price) } @item.inject(0){ |grand_total, item| grand_total + (item.quantity * item.price) } применяет блок к каждому item. Первый параметр grand_total в этом случае сначала присваивается начальному значению 0. Это делается через inject(0).

Блок затем начинает накапливать (item.quantity * item.price) в grand_total, который является конечным значением, которое возвращается в inject.

Надеюсь, это имеет смысл.

  • 0
    Можете ли вы уточнить и добавить его в мой код?
  • 0
    @ user3040563, кажется, ответчик уже предоставил достаточно кода, чтобы вы могли попробовать это сами, нет? Это довольно очевидно, на самом деле ...
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню