ruby on rails - signup - Rails 3 con Devise: ninguna ruta coincide/d/users/sign_out
devise wiki (3)
Recibo el siguiente error cuando intento cerrar la sesión de error de diseño:
Ninguna ruta coincide con [GET] "/ d / users / sign_out"
Mi etiqueta es correcta, es la siguiente:
<%= link_to "Sign Out", destroy_session_path, :method=>:delete %>
Mi ruta para diseñar es:
devise_for :users, :path_prefix=>"d", :controllers=>{:sessions=>"sessions"}
Otras rutas son:
resources :users#For CRUD defined after devise_for like in Devise Wiki
Con un controlador personalizado, sesiones para el inicio de sesión de ajax como en la página wiki de Devise:
class SessionsController < Devise::SessionsController
def create
respond_to do |format|
format.html{ super }
format.json do
resource = warden.authenticate!(:scope => resource_name, :recall => "#{controller_path}#failure")
#resource = warden.authenticate!(:scope => resource_name, :recall => :failure)
return sign_in_and_redirect(resource_name, resource)
end
end
end
def sign_in_and_redirect(resource_or_scope, resource=nil)
scope = Devise::Mapping.find_scope!(resource_or_scope)
resource ||= resource_or_scope
sign_in(scope, resource) unless warden.user(scope) == resource
return render :json => {:success => true, :redirect => stored_location_for(scope) || after_sign_in_path_for(resource)}
end
def failure
return render:json => {:success => false, :errors => ["Login failed."]}
end
end
El iniciador del diseño tiene:
config.sign_out_via = :delete
¿Alguna idea sobre qué podría estar causando el problema? He buscado en Google y todavía estoy perplejo.
Actualizar:
Aquí hay una captura de pantalla del archivo de rutas de rieles para los usuarios del dispositivo. Lo siento, es pequeño, pero puedes hacer clic derecho y luego verlo solo para una pantalla más grande.
Actualización # 2:
El archivo jquery_ujs está incluido.
Actualización # 3:
Parece que en la consola se está borrando, pero está pasando del session_controller a / luego a d / users / sign_out ... No estoy seguro de cómo solucionarlo.
Actualización # 4:
Cuando se redirige, va primero a d / users / sign_out como DELETE, como debería. A continuación, redirecciona a root_url
que a continuación root_url
el error ERROR Errno::ECONNABORTED: An established connection was aborted by the software in your host machine.
A continuación, intenta redirigir a d / users / sign_out como GET donde está fallando.
Parece que podría haber eliminado //= require jquery_ujs
de su archivo application.js. Creo que maneja los detalles del enlace para hacer una solicitud de "eliminación". De cualquier manera, como está ahora, estás haciendo un ''GET'' que obviamente no afectará tu método destroy_user_session
.
Esto parece ser un problema entre Devise y Ruby 1.9.2-p290. Actualizando a Ruby 1.9.3 y ejecutando la bundle update
para asegurar que se usó la última versión de Devise; parece funcionar
Cambio:
config.sign_out_via = :delete
a:
config.sign_out_via = :get
Vea esto relacionado:
Ninguna ruta coincide con "/ users / sign_out" idear rails 3