Devise / Rails: нет подходящих маршрутов [GET] "/ users / sign_out" - PullRequest
7 голосов
/ 06 марта 2012

Я немного озадачен тем, как 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 ]

15 голосов
/ 19 августа 2012

Если вы попытаетесь перейти к / users / sign_out, введя его в адресную строку браузера или выполнив обычную ссылку на него, вы получите эту ошибку.Подводя итог некоторым комментариям и ответам, приведенным здесь, а также по проблемам в репозитории devise на github:

Это предполагаемая функциональность, приложения RESTful не должны изменять состояние с помощью запроса GET.

Вы можете это исправитьсделав ссылку, которая использует метод DELETE, как упомянуто @Trip, @fuzzyalej, и обновление @Joseph Silvashy.

В качестве альтернативы (и менее рекомендуется), в /config/initializers/devise.rb,Вы можете внести следующее изменение

config.sign_out_via = :delete

в

config.sign_out_via = :get

Я сталкивался с этой проблемой, следуя наряду с http://railscasts.com/episodes/209-introducing-devise и более старой версией устройства, которую он там использует.это не было проблемой.

8 голосов
/ 22 июня 2012

Просто так у этого поста есть ответ:

Это должно быть отправлено методом delete, чтобы значение по умолчанию не было get

<%= link_to "Sign out", destroy_user_session_path, :method => :delete %>
3 голосов
/ 26 ноября 2013

Если вы используете SSL с контроллерами Devise и пытаетесь выйти из URL-адреса 'http', происходит отправка запроса DELETE в метод #destroy, а затем перенаправление в версию https через GET. Вы можете исправить это, добавив https к ссылке выхода, например:

= link_to "Sign out", destroy_user_session_url(protocol: 'https'), method: :delete

Примечание: должно быть "url" вместо "path"

0 голосов
/ 21 февраля 2017

У меня была та же проблема, и для ее решения потребовались следующие шаги: 1) включить // = require jquery_ujs в assets / javascripts / application.js 2) добавить gem 'jquery-rails' в мой gemfile 3) установить комплект

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

0 голосов
/ 22 июня 2012

Из документации на рельсы :

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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...