Ruby on rails开发从头来(windows)(九)-给购物车添加错误处理 (修正原版错误)
2008-11-19 19:22
811 查看
在上次的内容里,我们演示了怎样构建一个简单的购物车,这次的内容非常简单,给购物车添加错误处理。<?XML:NAMESPACE PREFIX = O />
对于Web系统来说,并发处理是一个无法回避的问题,我们来模仿一个并发冲突的情景:
1. 用户进入购物车页面,看到共有5种商品。
2. 管理员在后台维护商品列表,将5种商品中的一种删除掉。
3. 客户选中被删除掉的商品,添加到购物车。
在这种情况下,如果不作任何处理的话将会产生一个异常,而我们要作的,是处理这个异常,给用户显示一个商品不存在的错误提示。
1. 首先我们需要修改StoreController的add_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/layouts目录下的store.rhtml文件:
在<div id="main">这一句的后面添加下面的代码:
<div id="main">
<% if @flash[:notice] -%>
<div id="notice"><%= @flash[:notice] %></div>
<% end -%>
<%= @content_for_layout %>
</div>
然后在按照前面提到的3个步骤模拟一个并发冲突的情形,就会在页面上表示的错误信息了,如下图:<?XML:NAMESPACE PREFIX = V />
![](http://images.cnblogs.com/cnblogs_com/dahuzizyd/RailsStudy/Rails9_1.gif)
下面回头来看看前面的代码:
在add_to_cart方法里,我们使用了rescue代码块来进行异常处理,其中使用了Rails的logger来记录异常,异常信息可以在/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链接时会表示一个错误信息,如下图:
![](http://images.cnblogs.com/cnblogs_com/dahuzizyd/RailsStudy/Rails9_2.gif)
相关文章推荐
- Ruby on rails开发从头来(windows)(八)-使用Session创建购物车(修正原版错误)
- Ruby on rails开发从头来(windows)(九)-给购物车添加错误处理
- Ruby on rails开发从头来(windows)(九)-给购物车添加错误处理
- Ruby on rails开发从头来(windows)(九)-给购物车添加错误处理
- Ruby on rails开发从头来(windows)(五)-对输入进行验证 (修正原版错误)
- Ruby on rails开发从头来(windows)(四)-第一个添删查改例子 (修正原版错误)
- Ruby on rails开发从头来(windows)(七)-创建在线购物页面(修正原版错误)
- Ruby on rails开发从头来(windows)(二)-创建项目和第一个Hello world (修正原版错误)
- Ruby on rails开发从头来(windows)(六)-美化你的列表页面(修正原版错误)
- Ruby on rails开发从头来(windows)(三)-实现页面间的跳转(修正原版错误)
- Ruby on rails开发从头来(windows)(十)-清空购物车和格式化金额
- Ruby on rails开发从头来(windows)(八)-使用Session创建购物车
- Ruby on rails开发从头来(windows)(十四)-送货处理
- Ruby on rails开发从头来(windows)(十五)-添加用户
- Ruby on rails开发从头来(windows)(八)-使用Session创建购物车
- Ruby on rails开发从头来(windows)(十四)-送货处理
- Ruby on rails开发从头来(windows)(十四)-送货处理
- Ruby on rails开发从头来(windows)(十五)-添加用户
- Ruby on rails开发从头来(windows)(十)-清空购物车和格式化金额
- Ruby on rails开发从头来(windows)(八)-使用Session创建购物车