0

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

1 回答 1

1

您的代码中有错字,您正在阅读 session[:car*t*_id] 但正在编写 session[:car*d*_id]

另外,如果你想继承你的方法,你应该使用protected而不是private

于 2013-04-17T15:55:36.050 回答