Agile Web Development with Rails 3nd Edition学习笔记-错误处理

这一部分其实东西很少,这里不做过多的描述,仅仅是记录下来,以便今后查询使用。
以add_to_cart方法为例,当该方法收到一个错误的产品id时,会得到一个ActiveRecord::RecordNotFound错误。对应的包含错误处理的代码如下:
def add_to_cart
product = Product.find(params[:id])
@cart = find_cart
@cart.add_product(product)
rescue ActiveRecord::RecordNotFound
logger.error("Attempt to access invalid product #{params[:id]}" )
flash[:notice] = "Invalid product"
redirect_to :action => 'index'
end

"rescue"的部分是捕获错误并进行处理的代码。这部分代码的意义描述如下:
第一行:将出错信息写入Log文件
第二行:把出错信息保存到flash对象中。这个对象以哈希的方式保存Error消息。并且这个对像被保存在Session中。我们可以在需要的时候从它里面取出Error消息,显示在用户页面上。
第三行:将页面重定向到index页面。

要将flash显示在用户页面上,可采用如下的方法。
在depot/app/views/layouts/store.html.erb文件的<div id="main">...</div>节点开始部分加入如下代码:
<% if flash[:notice] -%>
<div id="notice"><%= flash[:notice] %>
<% end -%>


启动服务,在index页面任意产品处点击“Add to Cart”按钮,显示add_to_cart页面后,把浏览器地址栏中的地址“http://localhost:3000/store/add_to_cart/<id>”修改为“http://localhost:3000/store/add_to_cart/wibble”,点击刷新。你将会看到页面会自动回到index页面,而不是出错页面。同时在index页面中第一个产品之上会看到“Invalid product”的字样。也就是我们在上面代码中写的Error消息的内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值