ruby-on-rails - StoreController 中的 NoMethodError#display_cart

标签 ruby-on-rails ruby ruby-on-rails-4

我正在关注《使用 Rails 进行敏捷 Web 开发 - 实用指南》一书。在迭代 C1 中,创建购物车时出现以下错误:

NoMethodError in StoreController#display_cart
undefined method `items' for #<Hash:0xb5cf041c>

Extracted source (around line #15):

13  def display_cart
14    @cart = find_cart
15    @items = @cart.items
16  end
17
18 private

源文件如下:

路线.rb

Rails.application.routes.draw do
  get 'store' => 'store#index'
  get 'add_item_to_cart' => 'store#add_to_cart'
  get 'display_cart' => 'store#display_cart'
  resources :products

store_controller.rb

class StoreController < ApplicationController
  def index
    @products = Product.salable_items
  end

  def add_to_cart
    product = Product.find(params[:id])
    @cart = find_cart
    @cart.add_product(product)
    redirect_to display_cart_path
  end

  def display_cart
    @cart = find_cart
    @items = @cart.items
  end

  private 

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

购物车.rb

class Cart
    attr_reader :items
    attr_reader :total_price

    def initialize
        @items = []
        @total_price = 0.0
    end

    def items
        @items
    end

    def add_product(product)
        @items << LineItem.for_product(product)
        @total_price += product.price
    end
end

line_item.rb

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

我从 StoreControlleradd_to_cart 操作到达操作 display_cart 。即使我在 cart.rb 中有一个 def items,为什么我会得到一个 NoMethodError

最佳答案

假设您在 session 中存储了购物车 ID,您可以在方法中进行以下更改

def find_cart
    Cart.find_by_id(session[:cart_id]) ||= Cart.new
end

关于ruby-on-rails - StoreController 中的 NoMethodError#display_cart,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31677416/

相关文章:

ruby - 如何找到包含所有元音的同一数组的两个元素

ruby-on-rails - 消息 : Failure/Error: require File. expand_path ('../../config/environment' , __FILE__)

ruby-on-rails-4 - Rails 中的omniauth-facebook 验证错误

ruby-on-rails - 提交 ruby​​ 表单后重置字段的值

ruby - 使用带有局部变量的 `times` block 有奇怪的行为

ruby-on-rails - 如何使用github repo作为CDN服务器上传 Assets 文件?

ruby-on-rails - ActiveRecord .save 返回 true 但不保存?

ruby-on-rails - 重构方法不接受属性

javascript - 为什么 jQuery.each 无法检索到正确的高度值?

ruby-on-rails - rails 3.2.8 中未定义的 read_inheritable_attribute