我有一个表单,可以将产品添加到购物车中。这是一个将POST请求发送到/ products / 1 / add_to_cart
的简单表单当我在/ products / 1页面上并且我提交表单以将产品添加到购物车时,一切正常。但是,当我将产品添加到购物车然后再尝试添加产品时,它不起作用。我得到'no route matches“/ products / 1 / add_to_cart”'错误。
从/ products / 1提交表单时,它会成功,日志会显示:
在2011-07-04 16:10:27 -0600开始发布“/ products / 1 / add_to_cart”for 127.0.0.1
由ProductsController处理#add_to_cart为HTML
在此请求之后,该项目已添加到购物车,控制器操作调用了render:action => 'show'(保持将项目添加到购物车的验证错误)。该URL现在是/ products / 1 / add_to_cart
当尝试再次提交表单(从/ products / 1 / add_to_cart)再次将项目添加到购物车时,我收到路由错误:
在2011-07-04 16:13:05开始发布“/ products / 1 / add_to_cart”for 127.0.0.1 -0600 ActionController :: RoutingError(没有路由匹配“/ products / 1 / add_to_cart”):
我在这里遗漏了什么吗?如果我从URL处提交表单,那么为什么Rails不会找到路由(即:/ products / 1 / add_to_cart将表单提交到/ products / 1 / add_to_cart)? < / p>
----- ------ UPDATE
按请求,这是相关路线:
resource :store, :only => [:show], :controller => 'Store' do
resources :products, :except => [:index], :shallow => true do
member do
post :add_to_cart
end
end
end
这是(精简的)控制器:
class ProductsController < ApplicationController
def show
@cart_item = CartItem.new
end
def add_to_cart
@product = Product.find(params[:id])
@cart_item = CartItem.new(params[:cart_item])
@cart_item.product = @product
if @cart_item.save
current_cart.items << @cart_item
flash[:notice] = 'This item was added to your cart.'
end
render :action => :show
end
end