Не найдено ни одного маршрута [GET] "/ users / sign_out" - PullRequest
25 голосов
/ 04 июля 2011

Вот моя действительная ошибка: No route matches [GET] "/members/sign_out" Поскольку большинство людей будут использовать «пользователи», я подумал, что было бы более полезно иметь это в заголовке.В любом случае, я не могу выйти из системы.Я могу успешно отредактировать свой профиль участника.

Я использую devise 1.4.2 и Rails 3.1.0.rc4.Кроме того, я сгенерировал две отдельные модели устройств - одну, называемую «участники», а другую - «администраторы».Я был в состоянии зарегистрироваться и войти в них обоих (одновременно), вручную перейдя к правильному пути URL (то есть, localhost: 3000 / admins / sign_in /).Я создал несколько ссылок в моем файле макета application.html.haml, следуя этому RailsCast на Devise .Я знаю, что он обращается только к ссылкам входа / выхода для "участников".

Если я нажму на ссылку выхода, я получу вышеуказанную ошибку.Это происходит, если я вручную перехожу к одному из URL-адресов для выхода (то есть localhost: 3000 / admins / sign_out /).

Может кто-нибудь сказать мне, почему это происходит?Ниже приведены различные связанные файлы.И, конечно же, я новичок ...

Рейки маршрутизации:

    j(film_repo)$ rake routes
        new_member_session GET    /members/sign_in(.:format)       {:action=>"new", :controller=>"devise/sessions"}
            member_session POST   /members/sign_in(.:format)       {:action=>"create", :controller=>"devise/sessions"}
    destroy_member_session DELETE /members/sign_out(.:format)      {:action=>"destroy", :controller=>"devise/sessions"}
           member_password POST   /members/password(.:format)      {:action=>"create", :controller=>"devise/passwords"}
       new_member_password GET    /members/password/new(.:format)  {:action=>"new", :controller=>"devise/passwords"}
      edit_member_password GET    /members/password/edit(.:format) {:action=>"edit", :controller=>"devise/passwords"}
                           PUT    /members/password(.:format)      {:action=>"update", :controller=>"devise/passwords"}
cancel_member_registration GET    /members/cancel(.:format)        {:action=>"cancel", :controller=>"devise/registrations"}
       member_registration POST   /members(.:format)               {:action=>"create", :controller=>"devise/registrations"}
   new_member_registration GET    /members/sign_up(.:format)       {:action=>"new", :controller=>"devise/registrations"}
  edit_member_registration GET    /members/edit(.:format)          {:action=>"edit", :controller=>"devise/registrations"}
                           PUT    /members(.:format)               {:action=>"update", :controller=>"devise/registrations"}
                           DELETE /members(.:format)               {:action=>"destroy", :controller=>"devise/registrations"}
         new_admin_session GET    /admins/sign_in(.:format)        {:action=>"new", :controller=>"devise/sessions"}
             admin_session POST   /admins/sign_in(.:format)        {:action=>"create", :controller=>"devise/sessions"}
     destroy_admin_session DELETE /admins/sign_out(.:format)       {:action=>"destroy", :controller=>"devise/sessions"}
            admin_password POST   /admins/password(.:format)       {:action=>"create", :controller=>"devise/passwords"}
        new_admin_password GET    /admins/password/new(.:format)   {:action=>"new", :controller=>"devise/passwords"}
       edit_admin_password GET    /admins/password/edit(.:format)  {:action=>"edit", :controller=>"devise/passwords"}
                           PUT    /admins/password(.:format)       {:action=>"update", :controller=>"devise/passwords"}
 cancel_admin_registration GET    /admins/cancel(.:format)         {:action=>"cancel", :controller=>"devise/registrations"}
        admin_registration POST   /admins(.:format)                {:action=>"create", :controller=>"devise/registrations"}
    new_admin_registration GET    /admins/sign_up(.:format)        {:action=>"new", :controller=>"devise/registrations"}
   edit_admin_registration GET    /admins/edit(.:format)           {:action=>"edit", :controller=>"devise/registrations"}
                           PUT    /admins(.:format)                {:action=>"update", :controller=>"devise/registrations"}
                           DELETE /admins(.:format)                {:action=>"destroy", :controller=>"devise/registrations"}
                     films GET    /films(.:format)                 {:action=>"index", :controller=>"films"}
                           POST   /films(.:format)                 {:action=>"create", :controller=>"films"}
                  new_film GET    /films/new(.:format)             {:action=>"new", :controller=>"films"}
                 edit_film GET    /films/:id/edit(.:format)        {:action=>"edit", :controller=>"films"}
                      film GET    /films/:id(.:format)             {:action=>"show", :controller=>"films"}
                           PUT    /films/:id(.:format)             {:action=>"update", :controller=>"films"}
                           DELETE /films/:id(.:format)             {:action=>"destroy", :controller=>"films"}
                      root        /                                {:controller=>"films", :action=>"index"}

rout.rb

FilmRepo::Application.routes.draw do
  devise_for :members

  devise_for :admins

  resources :films

  root :to => 'films#index'
end

admin.rb (модель)

class Admin < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :token_authenticatable, :encryptable, :confirmable, :lockable, and :omniauthable
  devise :database_authenticatable, :registerable, :timeoutable,
         :recoverable, :rememberable, :trackable, :validatable

  # Setup accessible (or protected) attributes for your model
  attr_accessible :email, :password, :password_confirmation, :remember_me
end

member.rb (модель)

class Member < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :token_authenticatable, :encryptable, :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

  # Setup accessible (or protected) attributes for your model
  attr_accessible :email, :password, :password_confirmation, :remember_me
end

application.html.haml

!!!
%html
    %head
        %title Film Repo
        = stylesheet_link_tag 'compiled/screen.css', :media => 'screen, projection'
        = stylesheet_link_tag 'compiled/print.css', :media => 'print'
        /[if lt IE 8]
            = stylesheet_link_tag 'compiled/ie.css', :media => 'screen, projection'
            = csrf_meta_tag
    %body.bp
        #container
            #user_nav
                - if member_signed_in?
                    Signed in as #{current_member.email}. Not you?
                    \#{link_to "Sign out", destroy_member_session_path}
                - else
                    = link_to "Sign up", new_member_registration_path
                    or #{link_to "sign in", new_member_session_path}
                - flash.each do |name, msg|
                    = content_tag :div, msg, :id => "flash_#{name}"
            = yield

Ответы [ 19 ]

3 голосов
/ 14 декабря 2011

Может быть, это кому-нибудь поможет. Обновился с Rails 3.0 до 3.1 и обнаружил эту проблему. Это исправило это для меня:

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

devise.rb:
config.sign_out_via =: удалить

application.html.erb:

<%= javascript_include_tag "application" %>     

* не: по умолчанию

_login_items.html.erb:

<%= link_to('Logout', destroy_user_session_path, :method => :delete) %>

app / assets / javascripts / application.js

//= require jquery
//= require jquery-ui
//= require jquery_ujs
//= require_tree .

и я имел в javascript / jquery.js, jquery_ujs.js из версии 3.0, которую я удалил.

2 голосов
/ 10 сентября 2013

@ кремхост говорят,

devise_for :users do get '/users/sign_out' => 'devise/sessions#destroy' end

но это не правильное решение для меня (Rails4). Я решил нашу проблему (ответ @Olives),

link_to :logout, destroy_member_session_path, method: :delete
2 голосов
/ 13 октября 2011

FWIW Я также столкнулся с этой проблемой. Изучил все предложенные ответы, однако единственное, что сработало, - это открыть photos.rb и закомментировать следующую строку:

devise_for :users

Ниже добавьте следующую строку:

devise_for :users do get '/users/sign_out' => 'devise/sessions#destroy' end
2 голосов
/ 27 сентября 2011

Проблема начинается с рельсов 3.1 в assets/javascript/.Просто найдите application.js, и, если файл не существует, создайте файл с таким именем.Я не знаю, почему мой файл исчезает или никогда не был создан на новом приложении rails ... этот файл является экземпляром для jquery.

1 голос
/ 19 октября 2014

Просто используйте следующую ссылку для выхода:

<%= link_to "Sign out", destroy_user_session_path, method: :delete %>
1 голос
/ 02 августа 2016
//= require jquery_ujs

Вам не хватает этой строки в ваших активах. Нет необходимости получать /users/signout запрос. Поместите эту строку в файл JavaScript в верхней части страницы.

0 голосов
/ 20 июля 2011

Возникла та же проблема, и я вспомнил, что она начала происходить только после того, как я решил "очистить" мои файлы Javascript. Поэтому я снова запустил rails generate jquery:install --ui, и это решило это для меня. (Вы можете проигнорировать часть --ui, если вам не нужен JQuery UI, я полагаю.)

0 голосов
/ 06 декабря 2016

Это происходит только в Windows. Добавьте в файл Application.html.erb следующую вещь.

devise_for: users

devise_scope: user do
get '/ users /sign_out '=>' devise / session # destroy '
end

0 голосов
/ 23 августа 2012

Я получал ту же ошибку, что и OP, для / users / sign_out, потому что я ПОЛУЧИЛ его вместо УДАЛЕНИЯ (я тоже являюсь разработчиком первого года обучения).После проверки github с помощью этого ответа я отправил запрос на исправление, чтобы исправить его!

https://github.com/plataformatec/devise/pull/2040

Иди ТАК !!!

...