Как удалить элемент заказа с помощью Ajax из приложения Rails - PullRequest
0 голосов
/ 15 ноября 2018

Я пытался удалить элемент заказа из представления корзины с помощью Ajax ... На данный момент, если я нажимаю кнопку Удалить, элемент заказа удаляется из базы данных, но не из представления, и мой код ниже делаетне работает (у меня очень мало понимания ajax / jquery, поэтому, возможно, поможет более подробное объяснение):

controller.rb:

def destroy
@order_line.destroy
respond_to do |format|
  format.html { redirect_to :action => "show", :id => current_order_id }
  format.js
end
if last_order_item?(@order)
  @order.destroy 
  redirect_to books_url
end
end

view.html.erb:

<% @order.order_lines.order(:book_id).each do |line| %>
    <div class="order_line_row" id = "orderline-<%= line.id%>">
        <div class="book_details">
            <% if File.file?("#{Rails.root}/app/assets/images/#{line.book.image}") %>
                <%= image_tag line.book.image, class: "card-img-top", alt: "test image" %>
            <% else %>
                <%= image_tag "images.jpeg", class: "card-img-top", alt: "test image" %>
            <% end %>
            <h5 class="product-name"><%= line.book.title %></h5>
            <%= link_to 'Delete book', order_line_path(line.id), method: :delete, remote: true, class: "btn btn-primary" %> 
        </div>

        <div class="quantity">
            <%= form_for(line) do |f| %>
                <%= f.label :qty %></br>
                <%= f.number_field :qty, in: 1...line.book.stock %>
                <%= f.submit "Update", class: "btn btn-primary" %>
            <% end %>
        </div>

        <div class="price">Price</br><%= line.subtotal_price %></div>

    </div>
    <hr>
<% end %>

destroy.js.rb:

$(document).ready(function(){
  $('#orderline-<%= @line.id %>').remove();
})

Спасибо за ваше время ...

1 Ответ

0 голосов
/ 16 ноября 2018

Ваш destroy.js.erb должен быть просто:

    $('#orderline-<%= @line.id %>').remove();

Функция .ready() запускается только после загрузки DOM. Вы хотите изменить элемент, который уже был загружен.

Есть пара проблем и с destroy методом контроллера.

    def destroy

      # Add next line to create the @order_line object
      @order_line = OrderLine.find(params[:id])

      @order_line.destroy
      respond_to do |format|
        format.html { redirect_to :action => "show", :id => current_order_id }
        format.js
      end

      # None of this code will execute because the response 
      # has already been rendered. This needs to be before respond_to
      if last_order_item?(@order)
        @order.destroy 
        redirect_to books_url
      end
    end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...