Devise / Rails: no route matches [GET] " / пользователи / выход"
Я немного смущен тем, как devise маршрутизирует мои запросы, по какой-то причине я не могу перейти к пути выхода в моем приложении:
ActionController::RoutingError (No route matches [GET] "/users/sign_out")
вот как выглядят мои маршруты, связанные с моей моделью пользователя и Devise:
devise_for :users, :controllers => {:registrations => "registrations"}
devise_scope :user do
get '/settings' => 'registrations#edit'
end
будет ли определение этой области препятствовать работе и других моих маршрутов?
обновление
Я не думаю, что это должно быть GET
запрос, как моя ссылка выглядит так:
<%= link_to "Sign out", destroy_user_session_path, :method => :delete %>
5 ответов
Если вы попытаетесь перейти к /users / sign_out, введя его в адресной строке браузера или связавшись с ним нормально, вы получите эту ошибку. Чтобы суммировать некоторые комментарии и ответы здесь и из вопросов в devise repo на github:
это предполагаемая функциональность, RESTful приложения не должны изменять состояние с запросом GET.
вы можете исправить это, сделав ссылку, которая использует метод DELETE, как упомянуто @Trip, @fuzzyalej, и обновление @Joseph Сильваши.
альтернативно (и менее рекомендуется), в /config/initializers/devise.rb, вы можете сделать следующее изменение
config.sign_out_via = :delete
to
config.sign_out_via = :get
я столкнулся с этой проблемой, следуя вместе с http://railscasts.com/episodes/209-introducing-devise и с более старой версией devise, которую он использует там, это не было проблемой.
просто так этот пост есть ответ :
Это должно быть отправлено с методом, delete
чтобы по умолчанию не было get
<%= link_to "Sign out", destroy_user_session_path, :method => :delete %>
Если вы используете SSL с контроллерами Devise и пытаетесь выйти из url-адреса http, происходит то, что он отправляет запрос на удаление в метод #destroy, но затем перенаправляет на версию https через GET. Вы можете исправить это, добавив https к ссылке выхода, например:
= link_to "Sign out", destroy_user_session_url(protocol: 'https'), method: :delete
Примечание: должен быть ' url 'вместо ' path'
link_to("Destroy", "http://www.example.com", :method => :delete, :confirm => "Are you sure?")
# => <a href='http://www.example.com' rel="nofollow" data-method="delete" data-confirm="Are you sure?">Destroy</a>
Я имел такую же проблему и решить ее взял эти шаги: 1) Включите //= require jquirey_ujs в assets/javascripts/application.Яш 2) Добавьте gem 'jQuery-rails' в мой gemfile 3) пакет install
... и это сработало.