2016-07-01 5 views
0

У меня есть корзина/show.html Еврорадио с этим оказывает частичную Called carts_row.html.erbRails, что делает после того, как уничтожить

<p id="notice"><%= notice %></p> 

</br> 
</br> 

<div class="cart-container"> 
    <%=render 'carts_row'%> 
</div> 




</p> 

В carts_row это корзины макет покупок с формами, чтобы обновить количество и уничтожить/удалите элемент из своей корзины покупок.

<h1>Shopping Cart</h1> 

<div class="shopping-cart"> 
    <div class="column-labels"> 
    <label class="product-image">Image</label> 
    <label class="product-details">Product</label> 
    <label class="product-price">Price</label> 
    <label class="product-quantity">Quantity</label> 

    <!-- adding update column to labels --> 
    <label class="product-update">Update</label> 
    <label class="product-removal">Remove</label> 
    <label class="product-line-price">Total</label> 
    </div> 

    <%if @cart.cart_items.size == 0%> 
    <div class="text-center"> 
    <p>Looks like you have nothing in your cart! <%=link_to 'Add something to your cart', products_path%></p> 
    </div> 
    <%end%> 

    <br /> 
    <br /> 
    <%if @cart_items != nil%> 
    <%@cart_items.each do |item|%> 

    <div class="product"> 
     <div class="product-image"> 
     <%=image_tag(item.product.picture)%> 
     </div> 
     <div class="product-details"> 
     <div class="product-title"><%=item.product.name%></div> 
     <p class="product-description"><%=item.product.description%></p> 
     </div> 
     <div class="product-price"><%=number_to_currency(item.product.price)%></div> 

     <%=form_for item, remote: true do |f|%> 
     <div class="product-quantity"> 
     <%=f.number_field :quantity, value: item.quantity, min: 1, max: 8%> 
     <%=f.hidden_field :product_id, value: item.product.id%> 
     <!-- <input type="number" value="<%=item.quantity%>" min="1" max="8"> --> 
     </div> 
     <div class="product-update"> 
     <%=f.submit 'Update', class: "update-product"%> 
     <!-- <%=f.hidden_field :product_id, value: item.product.id%> --> 
     <!-- <button class="update-product"> 
      Update 
     </button> --> 
     </div> 
     <div class="product-removal"> 
     <%= link_to "Remove", item, {data: {confirm: "Are you sure you wish to delete the product '#{item.product.name}' from your cart?"}, method: :delete, remote: true, class: "remove-product"}%> 
     <!-- <button class="remove-product"> 
      Remove 
     </button> --> 
     <%end%> 
     </div> 
     <div class="product-line-price"><%=number_to_currency(item.product.price*item.quantity)%></div> 
    </div> 
    <%end%> 
    <%end%> 
<br /> 
<br /> 
<!--Temporary solution until model methods are written --> 
<% if @cart_items != nil%> 
    <!--subtotal variable --> 
    <%subtotal [email protected]_items.collect {|item| item.quantity*item.unit_price}.sum%> 
    <!--subtotal + shipping cost --> 
    <%total=subtotal+15%> 
<%end%> 
<div class="totals"> 
    <div class="totals-item"> 
    <label>Subtotal</label> 
    <div class="totals-value" id="cart-subtotal"><%=subtotal%></div> 
    </div> 
    <div class="totals-item"> 
    <label>Tax (5%)</label> 
    <div class="totals-value" id="cart-tax">Included!</div> 
    </div> 
    <div class="totals-item"> 
    <label>Shipping</label> 
    <div class="totals-value" id="cart-shipping">15.00</div> 
    </div> 
    <div class="totals-item totals-item-total"> 
    <label>Grand Total</label> 
    <div class="totals-value" id="cart-total"> 
     <%=total%> 
    </div></div> 
    </div> 
</div> 
<div class="checkout-btn"> 
    <button class="checkout">Checkout</button> 
</div> 
</div> 

Обновление в виде идет в update.js.erb, который имеет этот

<% if @cart.errors.any? || @cart_item.errors.any? %> 
    alert("Not valid."); 
<%else%> 
    $(".cart-text").html("<%= escape_javascript(render 'layouts/cart_text')%>") 
    $(".cart-container").html("<%= escape_javascript(render 'carts/carts_row')%>") 
<%end%> 

И уничтожить в виде имеет такой же destroy.js.erb

<% if @cart.errors.any? || @cart_item.errors.any? %> 
    alert("Not valid."); 
<%else%> 
    $(".cart-text").html("<%= escape_javascript(render 'layouts/cart_text')%>") 
    $(".cart-container").html("<%= escape_javascript(render 'carts/carts_row')%>") 
<%end%> 

update правильно отображает форму carts_row.html.erb. Когда я уничтожаю предмет, он отображает страницу с пустыми товарами и итоговую сумму в нижней части. Когда я обновляю страницу, отображается правильное количество продуктов в корзине покупок, и все там, где должно быть!

Как рендер обновляется корректно, но рендеринг уничтожает неправильно ???

Мой контроллер carts_item имеет эти два метода форм:

def update 
    @cart = current_cart 
    # finding cart_items by cart_id 
    @cart_item = @cart.cart_items.find(params[:id]) 
    # @cart_items.order(:id) 
    @cart_item.update_attributes(cart_item_params) 
    @cart_items = @cart.cart_items.order(:id) 
    # redirect 'cart_show_path' 
    end 

    def destroy 
    @cart = current_cart 
    @cart_item = @cart.cart_items.find(params[:id]) 
    @cart_item.destroy 
    @cart_items = @cart.cart_items 
    end 

ответ

0

Я понял проблему. Проблема заключалась в том, что я использовал <%, если @cart_items! = Nil%> проверить мой взгляд.

Это всегда возвращает false, потому что ActiveRecord всегда будет возвращать массив !!!!!!!!!! Имеет ли он объекты продукта в объекте @cart_items или нет.

После того как я изменил это, чтобы проверить пустые массивы с помощью @ cart_items.empty ?, тогда страница работала так, как я этого хотел.

Спасибо kumar за ваш ввод.

0

Вы разрушаете товар из корзины, но не удаляя его из @cart.cart_items

Попробуйте сделать это

def destroy 
    @cart = current_cart 
    @cart_item = @cart.cart_items.find(params[:id]) 

    #Find the index of @cart_item 
    item_index = @cart.cart_items.index(@cart_item) 

    #Remove it from @cart.cart_items when its destroyed successfully 
    if @cart_item.destroy 
    @cart.cart_items.delete_at(item_index) 
    end 

    @cart_items = @cart.cart_items 
end 

Сообщите мне, если это работает!

+0

Я предполагаю, что '@ cart.cart_items' является массивом. Дайте мне знать, если это не так, и покажите мне, что делает 'current_cart'. – Kumar

+0

Хм. это не имеет значения. потому что я нахожу отдельный cart_item параметрами [: id]. – powerup7

+0

Вы попробовали? Ради? – Kumar