Rails понимает GET-запрос, но не POST-запрос - PullRequest
2 голосов
/ 18 февраля 2011

Когда я захожу в / users / registration / sign_up в моем приложении через браузер (GET), страница отображается. Когда я делаю то же самое через POST (отправляя форму с помощью target / users / registration / sign_up или через ajax), мое приложение возвращает следующую ошибку:

Неизвестное действие Не удалось найти действие «регистрация» для UsersController

Я использую devise для аутентификации и создаю маршрут разработки для моей модели User, используя:

devise_for: пользователи

Этот путь должен направлять к devise / registrations_controller, где я ожидаю, что он выполнит новый метод (в настоящее время он выполняет запрос GET). Может быть, rails, понимание того, что запрос является запросом POST, автоматически направляет его в метод create, но я не думаю, что это проблема, потому что сначала я запускаю отладчик в методе create, а отладчик не запускается в моем терминале до того, как я получаю эта ошибка.

Может ли кто-нибудь с опытом разработки придумать, что происходит? Я рад предоставить больше информации, если это необходимо. Спасибо.

1 Ответ

4 голосов
/ 18 февраля 2011

Devise добавляет маршруты в ваше Rails-приложение, которое вы можете увидеть, запустив rake routes из терминала:

      new_user_session GET    /users/sign_in(.:format)
          user_session POST   /users/sign_in(.:format)
  destroy_user_session GET    /users/sign_out(.:format)
         user_password POST   /users/password(.:format)
     new_user_password GET    /users/password/new(.:format)
    edit_user_password GET    /users/password/edit(.:format)
                       PUT    /users/password(.:format)
     user_registration POST   /users(.:format)
 new_user_registration GET    /users/sign_up(.:format)
edit_user_registration GET    /users/edit(.:format)
                       PUT    /users(.:format)
                       DELETE /users(.:format)
                  root        /(.:format)

И, как вы обнаружили, существует GET /users/sign_up, но нет POST /users/sign_up.При создании Devise ожидает POST /users, для которого можно использовать вспомогательный метод user_registration_path.Это обрабатывается Devise::RegistrationsController#create.

...