0

古いRailscastに基づくコードを使用して、http://railscasts.com/episodes/142-paypal-notifications、カートに関する情報をサイトのさまざまな部分とやり取りしようとしましたが、問題は次のコード。

def create
@pProduct = Product.find(params[:product])
@item = Item.create!(:cart => current_cart, :product => @pProduct, :quantity => 1, :pPrice => @pProduct.pPrice)
flash[:notice] = "Successfully added #{@pProduct.pName}"
redirect_to current_cart_url 
end

この入力を処理するコードは、アプリ コントローラーにあります。

def current_cart
if session[:cart_id]
  @current_cart ||= Cart.find(session[:cart_id])
  session[:cart_id] = nil if @current_cart.purchased_at
end
if session[:cart_id].nil?
  @current_cart = Cart.create!
  session[:cart_id] = @current_cart.id
end
@current_cart
end

生成されたエラーは です。

ActiveModel::MissingAttributeError in ItemsController#create 
can't write unknown attribute `cart_id'
Rails.root: /home/timewaster/Aptana Studio 3 Workspace/cs2512
Application Trace | Framework Trace | Full Trace

app/controllers/items_controller.rb:4:in `create'

これはおそらくばかばかしいほど単純なものであることはわかっていますが、これで過去30分間頭を壁にぶつけていたので、どんな意見でも歓迎します.

編集: リクエストに応じて、routes.rb これがあちこちにあることをお詫びします。

http://pastebin.com/gq4Ekzvn 編集: 私はばかだということがわかりました。スキーマの問題は最悪です。

4

1 に答える 1

0
@item = Item.create!(:cart => current_cart, :product => @pProduct, :quantity => 1, :pPrice => @pProduct.pPrice)

読むべき

@item = Item.create!(:cart_id => @current_cart.id, :product_id => @pProduct.id, :quantity => 1, :pPrice => @pProduct.pPrice)

Item のモデル クラスで定義された正しい関連付けがあると仮定します。

より具体的には、これはあなたのアイテムがカートに属していることを前提としています。

于 2012-03-16T01:48:19.207 に答える