我已经添加了自定义路由,自定义控制器代码,并以表单的形式处理了该自定义路由,但是即使在错误消息中显示了该路由,我仍会收到有关该路由的错误消息。
表单/视图如下: 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
有什么建议吗?谢谢!
答案 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
形式,以便方法匹配。