我是rails的新手,现在正在通过“使用Ruby on Rails进行敏捷Web开发”教程。他们正在建立一个网上商店,而任务D则是关于创建一个购物车。要让LineItemsController知道放置项目的购物车,cart_id将保存在会话中:
class ApplicationController < ActionController::Base
private
def current_cart
Cart.find(session[:cart_id])
rescue ActiveRecord::RecordNotFound
cart = Cart.create
session[:card_id] = cart.id
cart
end
end
奇怪的是,这不起作用(虽然经过互联网搜索后,我觉得没有人遇到过这个问题)。 LineItemsController(&lt; ApplicationController)调用current_cart,但session [:cart_id]总是为nil,因此它会引发RecordNotFound错误并创建一个新的购物车。这导致很多购物车只包含1件商品。
奇怪的是,如果我将相同的方法放入LineItemsController类本身,一切都按预期工作!但这不是一个可接受的解决方案,因为我可能还需要在其他控制器中使用current_cart方法。无论如何,这个方法被继承有什么不同呢?
我正在使用Rails 3.2.13和Ruby 2.0.0,该教程似乎适用于Rails 3.2.0和早期版本的Ruby。从那时起有什么关于会议的变化所以我不得不做一些不同的事情???还是我错过了一些明显的东西?我不确定如果我没有得到这个基本工作正常工作的教程如何继续...
编辑
给出一些背景信息:
current_cart基本上称为@cart = current_cart
:
class LineItemsController < ApplicationController
#creates a line_item of a product and puts it in the cart
def create
@cart = current_cart
product = Product.find(params[:product_id])
@line_item = @cart.add_product(product.id)
#...
end
end
答案 0 :(得分:1)
您的代码中有拼写错误,您正在阅读会话[:car * t * _id]但是正在编写会话[:car * d * _id]
此外,如果您要继承您的方法,则应使用protected
代替private