论坛首页 入门技术论坛

在学习<应用Rails进行敏捷Web开发>遇到问题

浏览 1986 次
该帖已经被评为新手帖
作者 正文
   发表时间:2008-06-05  
在学习第八章 迭代C2 :创建购物车 遇到如下问题
引用
NoMethodError in StoreController#add_to_cart

undefined method `product' for #<Product:0x4a02900>

RAILS_ROOT: ./script/../config/..

D:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active_record/base.rb:1860:in `method_missing'
#{RAILS_ROOT}/app/models/cart.rb:16:in `add_product'
#{RAILS_ROOT}/app/models/cart.rb:16:in `each'
#{RAILS_ROOT}/app/models/cart.rb:16:in `find'
#{RAILS_ROOT}/app/models/cart.rb:16:in `add_product'
#{RAILS_ROOT}/app/controllers/store_controller.rb:11:in `add_to_cart'

我的cart.rb 文件代码如下

class Cart
 
 attr_reader :items
 
 def initialize
  @items = []
 end

 def add_product(product)
  current_item = @items.find {|item| item.product == product}
  if current_item
  current_item.increment_quantity
  else
  @items << CartItem.new(product)
  end
 end 
end


store_controller.rb代码如下
class StoreController < ApplicationController
 
 def index
  @products = Product.find_products_for_sale
 end
 
 def add_to_cart
  @cart = find_cart       
  product = Product.find(params[:id])
  @cart.add_product(product)    
 end

 private
 
 def find_cart
  session[:cart] ||= Cart.new
 end 
end


提示是找到不到items[]数据中的product方法,
也就是这一句上,
current_item = @items.find {|item| item.product == product}

一直都找不原因
   发表时间:2008-06-10  
问题应该出在session中
由于迭代前session中存放的是product
而迭代后是存放的cartitem
而session中的数据没有得到及时的更新

清空一下以前的session应该就可以了

rake db:sessions:clear
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics