Web开发敏捷之道学习(三)

10章 更智能的购物车

1)ActiveRecord小技巧:find_byActiveRecord模块注意到调用未定义的方法,且发现其名称是以字符串find_by开始和字段名结束,则动态构造查询器方法

findermethod,并添加到类中。

def add_product(product_id)

 current_item =line_items.find_by_product_id(product_id)

  if current_item

   current_item.quantity += 1

  else

   current_item =line_items.build(:product_id => product_id)

  end

 current_item

end

2)self.up/downup方法是操作数据库时用的,down是你后悔了,用来回滚用的。

self.upa,先从迭代每个购物车开始;b,对每个购物车及其每个相关联的商品项目,按照字段product_id进行编组,得出各字段之和;c,迭代每一组之和,从每

一个组中提取productquantityd,对于数量大于1的组,将删除该购物车和该产品相关的所有单个的商品项目,然后用正确数量的单行商品项目来替代他们。

self.downa,查找数量大于1的商品项目,为该购物车和产品添加一个新的商品项目,1个数量增加1行,最后删除该商品项目多余的行。代码如下:

def self.up

 #replace multiple items for a singleproduct in a cart with a single item

 Cart.all.each do |cart|

  #count the number of each product inthe cart

   sums =cart.line_items.group(:product_id).sum(quantity)

   sums.each do |product_id, quantity|

    if quantity > 1

     #remove individual items

     cart.line_items.where(:product_id=> product_id).delete_all

     #replace with a signal item

     cart.line_items.create(:product_id=> product_id, :quantity => quantity)

    end

  end

 end

end

def self.down

 #split items with quantity>1 intomultiple items

 LineItem.where("quantity>1").eachdo |line_item|

 #add individual items

 line_item.quantity.times do

  LineItem.create :cart_id =>line_item.cart_id,

  :product_id =>line_item.product_id, :quantity => 1

 end

 #remove original item

 line_item.destroy

end

3)闪存flash结构,像是一个桶bucket,更像散列,当处理请求时,可以在其中存储东西。对于同一会话的下次请求,在自动删除闪存内容之前,闪存中的内容都

是有效的。通常情况闪存是用来收集错误信息的。

rescue异常处理:a,使用Rails日志器记录错误,每个控制器有一个logger属性,此处用来记录error日志级别的信息。b,用redirect_to方法来重定向到目录网

页。:notice参数指定存储在闪存中的通知信息。

def show

 begin

  @cart = Cart.find(params[:id])

  rescue ActiveRecord::RecordNOtFound

  logger.error "Attempt toaccess invalid cart #{params[:id]}"

  redirect_to store_url, :notice =>'Invalid cart'

 else

  respond_to do |format|

   format.html # show.html.erb

   format.json { render json: @cart}

  end

 end

end

4)product_path&product_url

product_url:会得到包括协议和域名的完整信息,这是在用redirect_to时所需要的,如http://example.com/products/1

在其他情况下使用product_path无妨,它仅生成/products/1部分,当想要链接或转向表单时,这部分是全部所需的,如link_to“My lovely product”,product_path(product) 

修改于第五周周三     

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
英文新版:Agile Web Development with Rails, 4th Edition(For Rails 3.1 & 3.2) 内容简介 《Web开发敏捷之道:应用Rails进行敏捷Web开发(第3版)》主要分为两大部分。在“构建应用程序”部分中,读者将看到一个完整的“在线购书网站”示例。在随后的“Rails框架”部分中,作者深入介绍了Rails框架的各个组件。除了上述两部分外,对Rails缺乏了解的读者应该首先阅读“起步”部分,通过一个最简单的应用示例感性了解这个时下热门的web框架。不熟悉Ruby的读者应该阅读“附录”部分中的“Ruby简介”,以便了解Ruby的基本语法与常见用法。 《Web开发敏捷之道:应用Rails进行敏捷Web开发(第3版)》第1版曾荣获Jolt大奖“最佳技术图书”奖。在前两版的内容架构基础上,第3版增加了对Rails 2中新特性和最佳实践的内容介绍。相比第2版中的内容,Rails 2增加了REST、资源、轻量级web service等新特性。《Web开发敏捷之道:应用Rails进行敏捷Web开发(第3版)》涵盖了这些全新的内容,因此能更好地体现出Rails框架的发展现状。 整体而言,全书既有直观的实例,又有深入的分析,同时还涵盖了web应用开发中各方面的相关知识,堪称一部内容全面而又深入浅出的佳作。 编辑推荐 《Web开发敏捷之道:应用Rails进行敏捷Web开发(第3版)》:Ruby on Rails是一个全套的MVC web框架,它能帮你开发高质量又美观的web应用,而且开发速度快得出乎你想象。你只须集中精力于应用程序本身,Rails就会帮你搞定一切琐事。你甚至不需要写哪怕一行JavaScript代码,就能开发出支持各种JavaScript功能的应用程序。这几年来,Rails一直在发展,这《Web开发敏捷之道:应用Rails进行敏捷Web开发(第3版)》也一直随它一起发展。和前两版一样,我们还是先带领读者一步步构造一个真实的应用程序,然后深入介绍Rails内建的各种特性;和前两版不同,我们在第3版中重点介绍了Rails对“资源”的支持,并推荐了当今Rails开发者们的最佳实践。 在《Web开发敏捷之道:应用Rails进行敏捷Web开发(第3版)》中,你将可以…… ·跟随一个完整的教程,亲手编写一个基于web的在线商店; ·了解Rails如何消除烦人的配置与琐事; ·学会如何开发国际化的应用程序; ·看到如何在应用程序中融入Ajax、RES'T、webservices和e-maJl处理; ·在编写应用程序的同时,用内建的单元测试、功能测试和集成测试框架来测试应用程序; ·还有,轻松又安全地部署应用程序。 《Web开发敏捷之道:应用Rails进行敏捷Web开发(第3版)》基于:Rails2,在此前版本的基础上做了大量修订。 作者简介 作者:(美国)鲁比(Sam Ruby) (美国)托马斯(Dave Thomas) (美国)汉森(David Heinemeier Hansson) 译者:林芷薰 合著者:透明 鲁比(Sam Ruby),是一位杰出的软件开发者,他为Apache软件基金会下属的很多开源软件项目做出过重要的贡献,他主持的Atom web feed标准和广为使用的厂eedvalidatororg web service对web feeds的标准化起到了重要作用。他目前是IBM“创新技术组”的资深技术人员。 托马斯(Dave Thomas),作为《敏捷宣言》的起草人之一,他理解敏捷。作为《Programming Ruby》的作者,他理解Ruby。作为一位活跃的Rails开发者,他理解Rails。 汉森(David Heinemeier Hansson),是Rails框架的缔造者。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值