在我的产品索引视图中,我有一个“添加到购物车”,调用javascript函数addToCart:
addToCart: function() {
$.ajax({type: 'GET',
url: 'store/add_to_cart/2', // fixed id of product
timeout: 5000,
success: function() { alert('Added !'); },
error: function() { alert('Error !'); }
});
}
def add_to_cart // not working
begin
prod = Product.find(params[:id])
@cart = find_cart
@cart.add_product(prod)
render :partial => 'cart', :object => @cart if request.xhr?
end
end
使用此add_to_cart,它会渲染部分,但也会渲染此方法的默认视图 - add_to_cart.html.haml - 但是,如果我像下面这样做,它只渲染部分。 有人可以解释一下为什么会有所不同吗?
def add_to_cart // working fine
begin
prod = Product.find(params[:id])
@cart = find_cart
@cart.add_product(prod)
if request.xhr?
render :partial => 'cart', :object => @cart
else
redirect_to_index
end
end
end
感谢您的帮助!!
答案 0 :(得分:0)
问题在于,在这一行中,rails会混淆渲染调用的参数以及语句的位置。
您可能应该尝试render(:partial => 'cart', :object => @cart) if request.xhr?
。
另一件事。如果您在部分中使用局部变量,最好使用locals: {cart: @cart}
而不是:object
。或者,如果您遵循约定并且cart
部分位于app/view/carts/_cart.html*
,则可以说render @cart
。