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'


С rails документация:

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

... и это сработало.