在GET请求中忽略respond_with位置

时间:2012-05-03 15:27:21

标签: ruby-on-rails-3

在结帐流程的每一步,都会通过PUT请求更新订单。但是,其中一个州有一个表单提交给第三方,该第三方重定向回我的网站,使用GET调用更新方法(无法控制)。

为什么我的respond_with代码似乎完全被忽略,我收到Missing Template checkout/update错误?应该点击#edit

CheckoutController.rb

before_filter :load_order

def update
  if @order.update_attributes(params[:order])
    @order.next
  end
  respond_with(@order, :location => checkout_state_url(@order.state))
end

的routes.rb

match '/checkout/update/:state' => 'checkout#update', :as => :update_checkout
match '/checkout/:state' => 'checkout#edit', :as => :checkout_state
match '/checkout' => 'checkout#edit', :state => 'client_details', :as => :checkout

1 个答案:

答案 0 :(得分:0)

看起来respond_with根据HTTP谓词和资源是否有错误做了不同的事情。请参阅herehere

以下代码对我有用:

def update
    if @order.update_attributes(params[:order]) && @order.next
        respond_with(@order) { |format| format.html { redirect_to checkout_state_url(@order.state) } }
    else
        respond_with(@order) { |format| format.html { render :edit } }
    end
end