#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. Спасибо! вот что происходит, когда вы копируете код с примеров сайтов, не полностью понимая все это.