我正在制作一个网络应用,让人们可以在购物车中添加课程。我有一个有很多LineItems的Cart模型。
在购物车中,我有一个ajaxified按钮,可让人们删除单个订单项。这很好用。这是代码:
_line_item.html.erb:
<div class="delete_line_item"><%= button_to 'Delete', line_item,
{:method => :delete, :remote => true} %></div>
line_items控制器:
def destroy
@user = current_user
@line_item.destroy
@cart = @user.cart
respond_to do |format|
format.html { redirect_to(root_path) }
format.js
format.xml { head :ok }
end
end
然后,destroy.js.erb文件位于我的views / line_items文件夹中:
$("#cart").html("<%= escape_javascript(render(@cart)) %>");
我想做一些类似的事情来清空购物车。为此,我在推车控制器中使用更新操作。以下是相应的代码块:
<div class="empty_cart"><%= button_to 'Empty cart', cart, {:method => :put, :remote => true,
:confirm => 'Are you sure?'} %></div>
#carts controller
def update
if @cart.line_items
@cart.line_items.each do |item|
item.destroy
end
end
respond_to do |format|
if @cart.update_attributes(params[:cart])
format.html { redirect_to(root_path, :notice => 'Cart emptied.') }
debugger
format.js
format.xml { head :ok }
最后,这是update.js.erb文件我放在我的views / carts文件夹中:
$("#cart").html("<%= escape_javascript(render(@cart)) %>");
问题在于,当我尝试清空购物车时,请求会通过(当我刷新页面时,购物车为空),但点击后不会立即显示更改。这让我觉得我的浏览器根本就没有呈现.js.erb文件。我是否需要将update.js.erb文件放在不同的文件夹中或重命名?还是别的什么?
答案 0 :(得分:0)
除了使用更新操作之外,为什么不直接使用购物车的销毁操作而不是使用更新?这就是我的所作所为,并且有效。