AJAX с использованием рельсов: первый товар не обновляется в корзине

Я только начал изучать Ruby on Rails с использованием Agile Web Develop от Sam Ruby. В настоящее время я застрял на задаче F: добавление Ajax в корзину. Все шло хорошо, пока я не добавил код для сокрытия пустой корзины. Теперь, когда я добавляю первый товар, корзина отображается пустой на боковой панели (она должна отображаться с одним товаром в корзине), но когда я добавляю второй товар, корзина отображается с 2 предметами, как и должно быть. Код работает если я добавлю больше предметов. Я сталкиваюсь с проблемой только при добавлении первого товара в корзину. Я целый день рвал на себе волосы по этой проблеме. Любая помощь будет оценена. Извиняюсь, если я не предоставил полную информацию. Пожалуйста, дайте мне знать дополнительные детали, если таковые имеются, которые будут актуальны. Я использую рельсы 3.2.8 и ruby ​​1.9.3 Спасибо!

_cart.html.erb

<div class="cart_title">Your Cart</div>
  <table>
   <%= render(cart.line_items) %>

     <tr class="total_line">
             <td colspan="2">Total</td>
             <td class="total_cell"><%= number_to_currency(cart.total_price) %></td>
     </tr>

  </table>

<%= button_to 'Empty Cart',cart, method: :delete, confirm: 'Are you sure?'%>

_line_item.html.erb

<%if @current_item==line_item%>
<tr id="current_item">
<% else %>
<tr>
<% end %>

  <td><%= line_item.quantity %> &times;</td>
  <td><%= line_item.product.title %></td>
  <td class="item_price" ><%= number_to_currency(line_item.total_price) %></td>
  <td><%= button_to 'Remove Item', line_item, method: :delete, confirm: 'Are you   sure?'%>
</tr>

create.js.erb

 $("#notice").hide();

 if ($('#cart tr').length > 0) { $('#cart').show('blind', 1000); }

 $('#cart').html("<%=j render @cart %>");

 $('#current_item').css({'background-color':'#88cc88'}).
   animate({'background-color':'#114411'}, 1000);

application.js.erb

<html>
  <head>
   <title>Pragprog Books Online Store</title>
    <!-- START:stylesheet -->
   <%= stylesheet_link_tag "scaffold" %>
   <%= stylesheet_link_tag "depot", :media => "all" %><!-- <label id="code.slt"/> -->
   <!-- END:stylesheet -->
   <%= javascript_include_tag "application" %>
   <%= csrf_meta_tag %><!-- <label id="code.csrf"/> -->
  </head>
  <body id="store">
   <div id="banner">
    <%= image_tag("logo.png") %>
    <%= @page_title || "Pragmatic Bookshelf" %><!-- <label id="code.depot.e.title"/> -->
   </div>
   <div id="columns">
    <div id="side">
       <a href="/">Home</a><br />
       <a href="/faq">Questions</a><br />
       <a href="/news">News</a><br />
       <a href="/contact">Contact</a><br />
       <%if @cart%>
       <%= hidden_div_if(@cart.line_items.empty?, id:"cart") do%>
               <%=render @cart%>
         <% end %>
       <% end %>

    </div>
    <div id="main">
     <%= yield %><!-- <label id="code.depot.e.include"/> -->
    </div>
   </div>
  </body>
 </html>

~

1 ответ

Решение

Удалось решить это сам:).., печатая проблему, я получил подсказку, что проблема была так или иначе с самим рендерингом, и так оно и было.. решение состоит в том, чтобы установить параметр show в 0 в { $('#cart').show("слепой", 1000); } теперь код должен быть {$ ('# cart'). show ('blind', 0); }

@ Человек сделал!!

Другие вопросы по тегам