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'

我知道这可能是一件简单得可笑的事情,但任何意见都会受到欢迎,因为在过去的半个小时里,我一直在用这个把头撞到墙上。

编辑:根据要求,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 回答