zoukankan      html  css  js  c++  java
  • Ruby on rails开发从头来(windows)(九)给购物车添加错误处理

     

    在上次的内容里,我们演示了怎样构建一个简单的购物车,这次的内容非常简单,给购物车添加错误处理。

     

    对于Web系统来说,并发处理是一个无法回避的问题,我们来模仿一个并发冲突的情景:

    1.         用户进入购物车页面,看到共有5种商品。

    2.         管理员在后台维护商品列表,将5种商品中的一种删除掉。

    3.         客户选中被删除掉的商品,添加到购物车。

    在这种情况下,如果不作任何处理的话将会产生一个异常,而我们要作的,是处理这个异常,给用户显示一个商品不存在的错误提示。

     

    1.         首先我们需要修改StoreControlleradd_to_cart方法,下面是add_to_cart方法的代码:

    def add_to_cart

        product = Product.find(params[:id])

        @cart = find_cart

        @cart.add_product(product)

        redirect_to(:action => 'display_cart')

    rescue

        logger.error("Attempt to access invalid product #{params[:id]}")

        flash[:notice] = 'Invalid product'

        redirect_to(:action => 'index')

    end

     

    2.       修改rails_apps\depot\app\views\store目录下的index.rhtml文件:

    <div id="main">这一句的后面添加下面的代码:

    <% if @flash[:notice] -%>

        <div id="notice">

        <%= @flash[:notice] %></div>

    <% end -%>

     

    然后在按照前面提到的3个步骤模拟一个并发冲突的情形,就会在页面上表示的错误信息了,如下图:


    下面回头来看看前面的代码:

    add_to_cart方法里,我们使用了rescue代码块来进行异常处理,其中使用了Railslogger来记录异常,异常信息可以在\rails_apps\depot\log目录下的development.log文件里找到。

    在记录的异常后,使用了flash,这是一个类似于HashTable的对象,用来存储键和对应的内容。Rails使用flash来处理异常。

    我们使用flash[:notice] = 'Invalid product'来确定异常信息的内容,然后在页面上表示出来,在index.rhtml的代码里进行flash内容的表示:

    <% if @flash[:notice] -%>

        <div id="notice">

        <%= @flash[:notice] %></div>

    <% end -%>

     

    下面我们再添加一点处理,当用户的购物车为空的时候,点击Show My Cart链接会表示一个错误信息,提示用户购物车为空:

    还是StoreController,修改display_cart方法如下:

    def display_cart

      @cart = find_cart

      @items = @cart.items

      if @items.empty?

        flash[:notice] = "Your cart is currently empty"

        redirect_to(:action => 'index')

      end

    end

    这样当用户第一次进入购物车页面,不选择任何商品,直接点击Show My Cart链接时会表示一个错误信息,如下图:
  • 相关阅读:
    [WM]谁抢走了应用程序的性能?
    只有更烂的程序员
    [WM]n久以前写的ConnMgr类
    [WM][转]PPC中如何找到正在使用中的网络(源代码)
    让IE6支持minwidth和maxwidth的方法(JS实现) + (CSS实现)
    jQuery tab 切换函数
    wap、3g手机的端的网页头部
    复制到系统剪贴板之IE,ff兼容版
    鼠标滑过展开,js版和jquery版
    JS+CSS实现网页滚动条美化
  • 原文地址:https://www.cnblogs.com/dahuzizyd/p/867695.html
Copyright © 2011-2022 走看看