AJAX 使用 Rails : first item does not get updated on cart

标签 ajax ruby-on-rails-3 depot

我刚刚开始使用 Sam Ruby 的 Agile Web Development 学习 Ruby on Rails。我目前被困在任务 F:将 Ajax 添加到购物车。一切都很顺利,直到我添加到隐藏空购物车的代码中。现在,当我添加第一个项目时,购物车在侧栏上显示为空(它应该在购物车中显示一个项目)但是当我添加第二个项目时,购物车显示有两个项目,因为它应该。代码有效如果我添加更多项目。我只有在购物车上添加第一件商品时才会遇到这个问题。我已经在这个问题上撕了一天的头发。任何帮助将不胜感激。如果我没有提供完整的细节,请见谅。请让我知道相关的其他详细信息(如果有)。我正在使用 rails 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>

创建.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);

应用程序.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>

~

最佳答案

设法自己解决了:)..在输入问题时,我得到一个提示,问题出在渲染本身,所以它是..解决方案是将显示参数设置为 0 { $('#cart ').show('盲', 1000); } 代码现在应该是 { $('#cart').show('blind', 0); }

@Btuman 完成!!

关于AJAX 使用 Rails : first item does not get updated on cart,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12245095/

相关文章:

javascript - 跨域Ajax调用获取静态Html?

ruby-on-rails - 将 Rails Form Helpers 与序列化的自定义类一起使用

mapping - Perforce 仓库/客户端映射

ruby-on-rails - 在 rails 3 中使用 --skip-active-record 选项创建项目后恢复 AR 支持

version-control - Perforce 文件夹的服务器端复制/移动 - 无需本地同步文件

linux - Perforce、Linux - grep 查找已删除的仓库文件中的内容

javascript - 未获取数组的值,但数组存在 - JS

php - 如何在浏览器关闭时自动注销用户?

javascript - 访问json数据出错

ruby-on-rails-3 - 什么是(。:format) mean in rake routes' output?