Проблема с маршрутизацией сообщений для пользовательской формы

#ruby-on-rails

#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:

Проблема в том, что определенный маршрут использует метод PUT, а маршрут формы использует метод POST.

Либо измените маршрут для отправки с помощью post 'survey_requests/confirm', to: 'survey_requests#confirm' или добавьте method: :put в форму form_for @survey_request, url: survey_requests_confirm_path, method: :put , чтобы методы совпадали.

Комментарии:

1. Спасибо! вот что происходит, когда вы копируете код с примеров сайтов, не полностью понимая все это.