购物车:使用rails / ajax处理没有产品错误

时间:2011-07-27 11:14:17

标签: ruby-on-rails ajax error-handling

当用户将产品添加到购物车时,我使用ajax更改显示的购物车。为此,我打电话:remote => true发送回更新的购物车的正确控制器。 执行此操作的控制器方法如下:

def create
@cart = current_cart
product = Product.find(params[:product_id])
@line_item = @cart.add_product(product.id)
respond_to do |format|
  if @line_item.save
    format.html { redirect_to(magasin_url) }
    format.js   {@current_item = @line_item }
    format.xml  { render :xml => @line_item, :status => :created, :location => @line_item }
  else
    format.html { render :action => "new" }
    format.xml  { render :xml => @line_item.errors, :status => :unprocessable_entity }
  end
end

我希望能够通过发送通知消息而不是更新购物车来处理空库存。

我试过了:

if product.stock_to_display <=0
  respond_to do |format|
    format.html { }
    format.js   {}
  end
end

但我不知道格式中要放什么。我不知道如何在rjs中做一个条件:

    page.replace_html('panier', render(@cart))

page[:panier].visual_effect :blind_down if @cart.total_items == 1

page[:current_item].visual_effect   :highlight,
                                    :startcolor => "#88ff88",
                                    :endcolor => "#114411"

page.select("#notice").each {|notice| notice.hide}

所以我想知道如何使用ajax / rjs处理错误。感谢

1 个答案:

答案 0 :(得分:0)

经过一段时间的尝试后,我设法做了一些看似干净的事情。

我在控制器中创建了一个@success布尔值并影响了他一个值,之后我可以使用RJS中的布尔来做我的东西或显示通知。 这是我的新RJS。

if @success
  page.replace_html('panier', render(@cart))
  page[:panier].visual_effect :blind_down if @cart.total_items == 1
  page[:current_item].visual_effect     :highlight,
                                        :startcolor => "#88ff88",
                                        :endcolor => "#114411"
  page.select("#notice").each {|notice| notice.hide}
else
  page.replace_html :notice, flash[:notice]
  flash.discard
end

如果显示屏出现javascript错误,请检查应用程序布局,因为它可能会受到“if notice”条件的限制