请看过并实践过《web 开发敏捷之道,应用 Rails 进行敏捷 web 开发》,(第四版) 的过来人,帮忙确定一下,是否是书中的疏漏。
我看的是英文第四版,该书对应的中文第四版,我没有下载到:( ;该书中实践的是购物车
P132 页中的任务是处理错误异常 ITERATION E2: HANDLING ERRORS .如果客户在浏览器中,自己手工将站点中没有的产品加入进购物车,比如在浏览器中输入http://localhost:3000/carts/wibblewibble这个产品的ID并没有定义,如果不作任何的异常处理:一是系统给用户的出错提示太生硬,二也暴露了系统的设计,给黑客等提供了部分信息,存在安全隐患。该节的任务是加入错误异常处理,因为。
P132 页中,按照作者的指导,需要将购物车的控制器 cart_controller.rb 中的@cart = Cart.find(params[:id]) 加异常处理,方式是使用 rescue, 相关的代码如下。 app/controllers/carts_controller.rb def show begin @cart = Cart.find(params[:id]) rescue ActiveRecord::RecordNotFound logger.error "Attempt to access invalid cart #{params[:id]}" redirect_to store_url, :notice => 'Invalid cart' else respond_to do |format| format.html # show.html.erb format.xml { render :xml => @cart } end end end
操作完毕之后,结果如书中所述, 在后台日志中,rails 将前台用户的异常操作,记录进入 development.log 日志; 前台,将页面重新定向到http://localhost:3000, 实际的结果并没有如书中,图所示的,将很友好的 Invalid cart 在前台展示给用户。这个 Invalid cart 并没有出现
后来我找到了该书中文版第三版/中文版第二版 这两个版本中相应的章节却有说明: 先说中文第二版,在第二版 P107 页中有说:如果在前台需要展示出错的信息,需要将 flash 信息,需要将处理 flash 信息的代码放入布局文件中,所修改的是 app/views/layouts/store.rhtml ,另外还需要给提示框加上新的 css 样式,需要修改 public/stylesheets/depot.css 第三版中也有类似的说明,在第三版 P85 任务 8.4 迭代 C3:处理错误,也有同第二版中的说明:修改 store.rhtml 和相应的 depot.css 文件
但是我在第四版中未见相关的说明,全篇文档搜索相关的关键字也并没有找到类似说明;并且在官网下载的该项目源码中 (rails32 版),好像也没有什么说明。
请看过并且实践过此书中实例的前辈们,帮忙确认下,是否是书中的疏漏