0

これらは私のpruduct.rb、cart.eb、item.rb です。

class Product < ActiveRecord::Base

attr_accessible :category_id, :color, :description, :price, :size, :title, :product_type, :sub_category_id, :image_url

  belongs_to :category
  belongs_to :sub_category
  has_many :items
end  

Cart.rb

class Cart < ActiveRecord::Base

  has_many :items, dependent: :destroy
end  

アイテム.rb

class Item < ActiveRecord::Base


attr_accessible :cart_id, :product_id,:product

  belongs_to :cart
  belongs_to :product
end  

アイテムコントローラー

class ItemController < ApplicationController

def create
    @cart=current_cart
    product=Product.find(params[:product_id])
    @item=@cart.items.build(product: product)
    redirect_to clothes_path
    flash.now[:success]="Product successfully added to Cart"
  end

end  

カートの内容を次のよう に表示したいとき、私の見解では

<%= @cart.items.each do |item| %>  

current_cartメソッド _

def current_cart
cart=Cart.find(session[:cart_id])
rescue ActiveRecord::RecordNotFound
    cart=Cart.create
    session[:cart_id]=cart.id
    cart
  end

それは私にこのエラーを与える

nil:NilClass の未定義のメソッド「items」

ここで何が問題なのですか?Rails を使用したアジャイル Web 開発
の例に従っています。

4

2 に答える 2

1

ItemController の create アクションから cloths_path にリダイレクトした後、@cart インスタンス変数は布のコントローラー インデックス アクションで使用できなくなります。インデックスアクションで何らかの方法でリセットする必要がある

for eg: - 

you can pass cart id to it and find it in index cloth's action

redirect_to clothes_path, card_id: @cart.id

and in cloth's index action do 

@cart = Cart.find params[:cart_id]


create a mathod in application controller, and after u create a new cart, save its id in session, like

session[:cart] = @cart.id

def current_cart
  @cart = Cart.find session[:cart_id]
end

and in view use current_cart method instead of @cart 
于 2013-07-30T17:04:49.533 に答える