No hay coincidencias de ruta [GET] " / usuarios / cerrar sesión"


Aquí está mi error real: No route matches [GET] "/members/sign_out" Dado que la mayoría de las personas usarán "usuarios", pensé que sería más útil tener eso en el título. En cualquier caso, soy esencial incapaz de cerrar sesión. Puedo editar con éxito mi perfil de miembro.

Estoy usando devise 1.4.2 y Rails 3.1.0.rc4. Además, he generado dos modelos de devise separados: uno llamado " miembros "y el otro llamado"administradores". Pude registrarme e iniciar sesión en ambos (simultáneamente) navegando manualmente a la ruta de URL correcta (es decir, localhost: 3000 / admins / sign_in/). He creado algunos enlaces dentro de mi aplicación.HTML.archivo de diseño haml siguiendo este RailsCast en Devise. Soy consciente de que solo se dirige a los enlaces de signin/signout para " miembros."

Si hago clic en el enlace de inicio de sesión, obtengo el error anterior. Esto ocurre si navego manualmente a cualquiera de las URL de inicio de sesión (es decir, localhost:3000/admins/sign_out/).

¿Puede alguien decirme por qué está sucediendo esto? A continuación se muestran los diversos archivos relacionados. Y por supuesto, estoy un novato...

Salida de rutas de rake:

    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"}

Rutas.rb

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

  devise_for :admins

  resources :films

  root :to => 'films#index'
end

Admin.rb (modelo)

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

Miembro.rb (modelo)

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

Solicitud.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
Author: Joe, 0000-00-00

19 answers

Tuve un problema similar, pero la adición del :method=> :delete no funcionó. Pude agregar una nueva ruta para una solicitud get comentando el devise_for :users y agregando

devise_for :users do
  get '/users/sign_out' => 'devise/sessions#destroy'
end
 43
Author: cramhead,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-11-11 14:01:32

Puede finalizar una sesión a través de get cambiando la configuración de devise en inicializadores.

# The default HTTP method used to sign out a resource. Default is :delete.
config.sign_out_via = :get

Simplemente abra el enlace y su sesión se eliminará.

 41
Author: itkevin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-09-11 19:00:04

Aunque no conozco la causa, la razón por la que estás recibiendo ese mensaje es porque en tus rutas tienes

destroy_member_session DELETE /members/sign_out(.:format)      {:action=>"destroy", :controller=>"devise/sessions"}

Lo que significa que la ruta solo está disponible con el método DELETE en lugar de GET. Esto es un poco raro ya que en los documentos de devise dice que debe crearlo como GET route (https://github.com/plataformatec/devise/blob/master/lib/devise/rails/routes.rb#L30)

Con él como una ruta de ELIMINACIÓN, debería poder cerrar sesión usando

link_to :logout, destroy_member_session_path, :method => :delete 
 20
Author: Olives,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-07-04 17:14:11

Tuve un problema similar. Mi código de vista era así:

  <%= link_to " exit", destroy_user_session_path, method: :delete %>

Después de agregar el siguiente cambio a las rutas.rb funcionó,

devise_for :users

devise_scope :user do  
   get '/users/sign_out' => 'devise/sessions#destroy'     
end
 16
Author: Reza,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-05-07 07:56:31

Solo necesitaba agregar el

//= require jquery
//= require jquery_ujs

A mi application.js

 16
Author: Victor Martins,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-06 02:12:29

Todavía podemos usar :method => :delete en mi código, así

 = link_to "Sign out", destroy_user_session_path,:method => :delete

La razón por la que creo que no podemos cargar javascript que incluyen jquery, asegúrese de

= javascript_include_tag "application" (haml- you can use html too)

Para incluir jquery-ui y jquery-ujs. Así que si todavía error, sugiero cambiar rails gem en GEMFILE a la versión 3.2.6 y llamar bundle update para actualizar gemas. ¡Funciona para mí!

 6
Author: duykhoa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-09-11 18:16:10
= link_to "Sign out", destroy_user_session_path,:method => :delete

Will NOT work instead use this,

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

Debería hacer el truco o, en el peor de los casos, agregar require jquery_ujs en su aplicación .js

 5
Author: Nikhil Nanjappa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-12-01 10:36:32

En devise.po, variación

 config.sign_out_via = :delete

A

config.sign_out_via = :get

Esto funcionó para mí. Me volví loco con esto porque el valor predeterminado es delete y no entiendo por qué.

Esto funciona, pero no estoy seguro de si afecta a otros elementos de la aplicación.

 5
Author: loloso,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-12 09:54:52

Usando Rails4, tuve que usar el siguiente método:

<%= link_to "Logout", destroy_admin_session_path, method: :delete %>

Énfasis en dónde están los dos puntos en el método: y: delete

 4
Author: Sam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-03-25 12:18:54

Tal vez eso ayude a alguien. Actualizado de Rails 3.0 a 3.1 y encontrado este problema. Esto lo arregló para mí:

Rutas.rb:
devise_for: usuarios

Idear.rb:
config.sign_out_via=: delete

Solicitud.HTML.erb:

<%= javascript_include_tag "application" %>     

* not: defaults

_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 .

Y tenía en javascript/ jquery.js, jquery_ujs.js de la versión 3.0 que he eliminado.

 3
Author: Katya B,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-12-13 23:19:37

Es posible que haya eliminado assets / javascripts/ *

Run rails generate jquery:install --ui esto generará todos los javascript como se muestra a continuación

xxxx@xxxxx:~/Projects/Rails_apps/rtest$ rails generate jquery:install --ui
      remove  public/javascripts/prototype.js
      remove  public/javascripts/effects.js
      remove  public/javascripts/dragdrop.js
      remove  public/javascripts/controls.js
     copying  jQuery (1.7.1)
      create  public/javascripts/jquery.js
      create  public/javascripts/jquery.min.js
     copying  jQuery UI (1.8.16)
      create  public/javascripts/jquery-ui.js
      create  public/javascripts/jquery-ui.min.js
     copying  jQuery UJS adapter (822920)
      remove  public/javascripts/rails.js
      create  public/javascripts/jquery_ujs.js

Vaya a su diseño, por ejemplo, la aplicación.HTML.erb y editar <%= javascript_include_tag :all %>

Que funcionó para mí:)

 3
Author: Bernard Banta,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-12-29 17:13:33

FWIW También me he encontrado con este problema. Han examinado todas las respuestas sugeridas, sin embargo, la única que funcionó fue fotografiar rutas abiertas.rb y comentar la siguiente línea:

devise_for :users

Debajo de eso, añádase la siguiente línea:

devise_for :users do get '/users/sign_out' => 'devise/sessions#destroy' end
 2
Author: Jason,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-10-13 00:44:18

El problema comienza con rails 3.1 en assets/javascript/. Simplemente busque application.js, y si el archivo no existe, cree un archivo con ese nombre. No se por qué mi archivo desaparece o nunca fue creado en rails nueva aplicación... ese archivo es la instancia de jquery.

 2
Author: rome3ro,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-11-10 23:53:29

@creamhost decir,

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

Pero no es la solución correcta para mí (Rails4). Resolví nuestro problema (respuesta de @ Olives),

link_to :logout, destroy_member_session_path, method: :delete
 2
Author: seyyah,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-01 01:39:19

Simplemente use el siguiente enlace para cerrar sesión:

<%= link_to "Sign out", destroy_user_session_path, method: :delete %>
 1
Author: phildub,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-10-19 00:06:26
//= require jquery_ujs

Le falta esta línea en sus activos. No hay necesidad de obtener la solicitud /users/signout. Ponga esta línea en el archivo JavaScript en la parte superior de la página.

 1
Author: Idrees Ibrahim,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-02 12:24:33

Tenía el mismo problema y recordaba que solo comenzó a suceder después de que decidí "limpiar" mis archivos Javascript. Así que corrí rails generate jquery:install --ui de nuevo y esto lo resolvió para mí. (Puede ignorar la parte ui ui si no necesita jQuery UI, supongo.)

 0
Author: octimizer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-07-19 20:02:36

Estaba recibiendo el mismo error que el OP tenía para /users/sign_out porque lo estaba recibiendo en lugar de ELIMINARLO (yo también soy un desarrollador de 1er año). Después de comprobar github a través de esta respuesta, envié la solicitud de extracción para corregirlo!

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

¡Vamos S. O. !!!
 0
Author: RudyOnRails,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-08-23 16:40:27

Solo sucede en Windows.. Agregue lo siguiente a su Aplicación.HTML.archivo erb.

Devise_for: usuarios

Devise_scope: usuario do
get '/ users / sign_out '= > 'devise/sessions # destroy'
fin

 -2
Author: Kartikey Garg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-05 21:43:56