在重新提交有错误的表单时,如果PATCH请求应该是POST,则会调用它

时间:2014-06-25 22:04:55

标签: ruby-on-rails forms ruby-on-rails-4 routing

发生了一些非常有趣的事情......我的控制器有两个单独的检查,它们允许提交表单(下面的代码很简单,还有其他的事情发生)。如果任一检查点失败,则会重新呈现new页面。

以下是代码:

def create
    if checkpointone == fail
        render 'new'
    else
        if checkpointtwo == fail
            render 'new'
        else
            redirect_to action: 'success'
        end
    end
end

这是我遇到的有趣流量问题:

  1. 用户输入的数据失败checkpointone并通过checkpointtwo
  2. 用户提交
  3. new页面使用原始参数和错误消息成功重新呈现
  4. 用户仍然输入了错误的数据(checkpointone再次失败,或者checkpointtwo失败,但<{1}}失败了)
  5. 用户提交
  6. 应用程序失败,错误为No route matches [PATCH] "/requests"
  7. 但是为什么它总是突然寻找PATCH呢?谁告诉它?奇怪的是,如果我从checkpointtwo中的失败和checkpointone中的传递开始,从那时起,我可以以各种组合进行任意数量的失败和重新提交,我将永远得到正确的操作:new页面使用原始参数和错误消息重新渲染。

    观看代码段:

    <%= form_for @requestrecord, :url => { action: 'create' }, :html=> {:id => 'form'} do |f| %>
    

    路线代码片段:

    get 'requests/new', to: 'requests#new', as: 'new_request'
    post 'requests', to: 'requests#create'
    

1 个答案:

答案 0 :(得分:1)

在Rails 4中,PATCH用于更新。可能是即使检查点失败也会创建您的记录。这将导致Rails认为后续请求是更新请求,而不是创建请求。