Рельсы - удаление одного предмета из корзины покупок, когда имеется более одного одинакового предмета - PullRequest
0 голосов
/ 08 октября 2018

Я работаю над книгой Agile Web Development With Rails и застрял в одном из дополнительных упражнений.Цель состоит в том, чтобы удалить элементы из корзины покупок, и, хотя я могу сделать это с отдельными элементами, когда имеется более одного элемента, он в настоящее время стирает их все.Я хочу, чтобы кнопка «Удалить элемент» удаляла только один из нескольких элементов.

В данный момент корзина выглядит так:

элемент 1 |количество: 1

пункт 2 |количество: 3

Поэтому, когда я нажимаю кнопку удаления элемента на элементе 2, в настоящее время он удаляет все три элемента, а не только один.Я пытаюсь сделать это, уменьшив атрибут количества элемента, если он больше единицы, а не удаляя его, однако в настоящее время он ничего не делает.Он по-прежнему удаляется, если количество равно 1. Что я здесь делаю неправильно?

из line_items_controller.rb

def destroy
  @cart = @line_item.cart
  if @line_item.quantity > 1 
    @line_item.quantity-=1
  else
    @line_item.destroy
  end
  respond_to do |format|
    format.html { redirect_to @cart }
    format.json { head :no_content }
  end
end

cart.show.erb

<p id="notice"><%= notice %></p>
<h2>Your Cart</h2>
<table> 
  <% @cart.line_items.each do |item| %> 
    <tr>
      <td><%= item.quantity %> &times; </td> 
      <td><%= item.product.title %></td> 
      <td class="item_price"><%= number_to_currency(item.total_price) %></td>
      <td><%= button_to "Remove Item", item, method: :delete, data: { confirm: 'Are you sure?' } %></td>
    </tr>
  <% end %>
  <tr class="total_line">
    <td colspan="2">Total</td> 
    <td colspan="total_cell"><%= number_to_currency(@cart.total_price) %></td>
  </tr>
</table>
<%= button_to "Empty Cart", @cart, method: :delete, data: { confirm: 'Are You Sure?' } %>

1 Ответ

0 голосов
/ 08 октября 2018

Ваш код не фиксирует изменение количества в базе данных.Вам нужно добавить что-то вроде:

@line_item.save

Итак, ваш код будет выглядеть так:

def destroy
  @cart = @line_item.cart
  if @line_item.quantity > 1 
    @line_item.quantity-=1
    @line_item.save
  else
    @line_item.destroy
  end
  respond_to do |format|
    format.html { redirect_to @cart }
    format.json { head :no_content }
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...