我是 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 (< 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