自定义表单的POST路由问题

时间:2019-04-02 14:33:16

标签: ruby-on-rails

我已经添加了自定义路由,自定义控制器代码,并以表单的形式处理了该自定义路由,但是即使在错误消息中显示了该路由,我仍会收到有关该路由的错误消息。

表单/视图如下:     views / survey_request / confirmation.html.erb

<%= form_for @survey_request, url: survey_requests_confirm_path do |f| %>
  <p>Your Email Address: <%= f.text_field :customer_email %></p>
  <%= f.hidden_field :survey_token, value: @survey_request.survey_token %>
  <p>Your survey token: <%= @survey_request.survey_token %></p>
  <p><%= f.submit %></p>
<% end %>

routes.rb文件中我相关的路由如下:

get 'survey/:id', to: 'survey_requests#confirmation'
put 'survey_requests/confirmation', to: 'survey_requests#confirmation'
put 'survey_requests/confirm', to: 'survey_requests#confirm'

在survey_requests_controller.rb中,我定义了一个方法

def confirm
  #code here to confirm the users email and token
end

当我运行该应用程序时,confirmation.html.erb表单显示很好,其中包括传递给它的令牌。提交表单时,出现以下错误:

No route matches [POST] "/survey_requests/confirm"

但是,当我在同一错误页面上向下滚动时,它会显示路由:

survey_requests_confirm_path    PUT /survey_requests/confirm(.:format)  survey_requests#confirm

有什么建议吗?谢谢!

1 个答案:

答案 0 :(得分:1)

问题在于定义的路由使用PUT方法,而表单路由使用POST方法。

要么使用post 'survey_requests/confirm', to: 'survey_requests#confirm'将路由更改为POST,要么将method: :put添加到form_for @survey_request, url: survey_requests_confirm_path, method: :put形式,以便方法匹配。