Невозможно выйти из приложения Rails, используя гем Devise, маршрут не соответствует / users / sign_out - PullRequest
1 голос
/ 28 марта 2012

Я знаю, что на разных сайтах есть десятки вопросов по этой проблеме.Я много чего перепробовал, и до сих пор не могу заставить работать ссылку с методом DELETE.

Я создал пустое приложение rails

Версии:

  • devise 2.0.4
  • рельсы: 3.2.2
  • Рубин: 1.9.2
  • RVM: 1.10.3

После того, как я установил devise gem, я выполнил следующие команды:

rails generate devise:install
rails generate devise User

Исправления, которые я попробовал, приведены ниже:

Исходная ссылка:

<%= link_to "Sign out", destroy_user_session_path %>

Я добавил метод удаленияв тиках и без них:

<%= link_to "Sign out", destroy_user_session_path, :method => 'delete' %>
<%= link_to "Sign out", destroy_user_session_path, :method => :delete %>

Добавил это в application.html.erb:

<%= javascript_include_tag :defaults %>

Я раскомментировал эти строки в assets / javascripts / application.js:

= require jquery
= require jquery_ujs

Я также пытался заставить работать ссылку GET, изменил эту строку с config / initializers / devise.rb

config.sign_out_via = : delete

на эту:

config.sign_out_via = :get if Rails.env.test?

Неважното, что я пытаюсь, УДАЛИТЬ ссылки приводят к этому:

No route matches [GET] "/users/sign_out" 

GET ссылки не работают также:

Нет совпадений маршрута [GET] "/"

Iпопытался перезагрузить сервер, конечно.

RakМаршруты содержат это:

 destroy_user_session DELETE /users/sign_out(.:format)      devise/sessions#destroy

Заранее спасибо.

Ответы [ 3 ]

8 голосов
/ 28 марта 2012

в devise.rb

найти config.sign_out_via = :delete

изменить на config.sign_out_via = :get

если вы используете: получите, убедитесь, что вы используете: method =: get, и если вы используете: удалите с помощью: method =>: удалите в вашей ссылке

на производстве вам, возможно, придется поменять его местами, поэтому вы должны использовать оператор if для проверки RAILS_ENV

В вашем примере вы, вероятно, работаете в режиме разработки, а не в тесте, поэтому, вероятно, он не работает.

И перезапустите сервер, так как он инициализатор.

2 голосов
/ 28 марта 2012

Этот помощник всегда работает для меня:

link_to "Logout", destroy_user_session_path, :method => :delete

Может быть, вы не вошли в систему должным образом?Вы можете проверить с if current_user

0 голосов
/ 28 марта 2012

Можем ли мы увидеть файл ваших маршрутов?

В частности, вызов devise_for

Вы также можете попытаться установить путь явно

devise_for :users, path_names: { sign_out: 'sign_out' }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...