学习 Agile Web Development with Rails“ 8.3 循环 C1: 创建个购物车”遇到的问题

dl1125 2006-10-29 12:03:03
刚刚学习ruby,看书的时候,按照书上写例子出现问题,困扰我几天了:

执行add_product方法的时候,报错:undefined method `find' for #<LineItem:0x6724bf0>

class Cart
#get,set 方法的声明
attr_reader:items
attr_reader:total_price
def initialize
@items =[]
@total_price=0.0
end

def add_product(product)
# @items << LineItems.for_product(product)
# @total_price+=product.price
#
item = @items.find{|i| i.product_id == product.id }
if item
item.quantity +=1
else
@items = LineItem.for_product(product)
@items << item
end
@total_price+=product.price
end

end

class LineItem < ActiveRecord::Base
#告诉表的外键的表关系
belongs_to:product
def self.for_product(product)
item = self.new
item.quantity =1
item.product=product
item.unit_price = product.price
item
end
end
请问如何解决?谢谢!!
...全文
342 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
jimmy_kuu 2007-02-02
  • 打赏
  • 举报
回复
如yangbo_hr()所述,确实是,@items被设置成了LineItem对象,修改如下:

def add_product(product)
item = @items.find{|i| i.product_id == product.id }
if item
item.quantity +=1
else
#@items = LineItem.for_product(product)
item = LineItem.for_product(product)
@items << item
end
@total_price+=product.price
end

#csnd的排版方式真是让人没脾气
jimgreat 2007-01-24
  • 打赏
  • 举报
回复
书上的小型购物系统除了(E1:基本的发货功能)我都实现了,用的都是书上的代码,所以书上的代码应该没什什么问题。
还有书上第96页,第三行的 “@cart=.empty!” 应该是“@cart.empty!”没有等号,估计是印刷错误。
hjtalnet 2007-01-21
  • 打赏
  • 举报
回复
楼主是不是一直照书做的啊?
这里的原因是session里已经保存了你之前未完工的cart,把session清除下就可以了
微风好飞行 2006-12-23
  • 打赏
  • 举报
回复
从错误提示看,@items并不是一个数组对象,所以错误可能是由于 @items 被错误设置成了 LineItem 对象。你可以确认一下异常出现的行数,并把行数也一并粘出来看看。
3rd 2006-12-22
  • 打赏
  • 举报
回复
把find改成each吧
mathsfan 2006-12-21
  • 打赏
  • 举报
回复
强嘛,我学到第6章就有错误了,到现在还没找到怎么回事```
cloudgamer 2006-12-20
  • 打赏
  • 举报
回复
学习

2,763

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 Ruby/Rails
社区管理员
  • Ruby/Rails社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧