Rails表单不会提交自我引用形式

时间:2011-07-04 22:29:41

标签: ruby-on-rails

我有一个表单,可以将产品添加到购物车中。这是一个将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

0 个答案:

没有答案