rails not español ejemplos current_user create could ruby-on-rails devise

ruby on rails - not - Idear: ¿Por qué no funciona mi enlace de cierre de sesión?



devise rails ejemplos (17)

1) Creo que es posible que tengas que instalar debajo de la gema, la solicitud con el método:: delete funcionará en otro caso, puede ir como obtener

https://github.com/rails/jquery-rails

2) Añade estas dos líneas abajo en application.js

//= require jquery //= require jquery_ujs

El problema: en pocas palabras, cuando intento instalar un enlace de cierre de sesión en mi aplicación, no funciona. Aquí hay tanto contexto como puedo pensar para poner aquí (si quieres algo más, por favor, pégame) ...

Tengo esto en una vista de haml:

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

Genera esto en la vista:

<a href="/users/sign_out" data-method="delete" rel="nofollow">Logout</a>

Verifiqué que en mi config / initializers / devise.rb tengo esta configuración sin comentarios y correcta:

config.sign_out_via = :delete

Validé la siguiente ruta:

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

También tengo un poco de engaño en mis rutas.rb, y sospecho que esto está relacionado con mi problema:

devise_for :users, :controllers => {:sessions => "devise/sessions", :registrations => "users"} resources :users

Este último bit se debe a que quiero administrar (editar, crear y eliminar) usuarios en mi propio controlador.

El mensaje de error que estoy recibiendo es el siguiente:

ActiveRecord::RecordNotFound in UsersController#show Couldn''t find User with ID=sign_out Rails.root: /home/jaydel/projects/mbsquared-projects/Wilson-Goldrick app/controllers/users_controller.rb:16:in `show''

En mis registros de servidor veo esto para la solicitud:

Started GET "/users/sign_out" for 127.0.0.1 at 2011-08-04 13:08:51 -0500 Processing by UsersController#show as HTML Parameters: {"id"=>"sign_out"}

¿Alguien tiene alguna idea?


Como lo mencionó Tombart anteriormente, la respuesta para mí fue volver a poner la llamada rails-ujs en mi archivo application.js.

//= require rails-ujs //= require turbolinks

Inicialmente los había eliminado para evitar que se reevalúen mis scripts en el pie de página. Mi solución fue crear un archivo de compilación footer.js con los recursos que quería en el pie de página.

//= require jquery-3.2.1.min //= require jquery-ui-1.12.1.min //= require materialize //= require init

Luego en mi archivo /initializers/assets.rb agregando una precompilación

Rails.application.config.assets.precompile += %w( footer.js )

Luego puede llamar a lo siguiente en su archivo layout / application.html.erb.

<%= javascript_include_tag ''application'', ''data-turbolinks-track'' => true %> <%= javascript_include_tag ''footer'' %>

Mantengo la línea de aplicación en mi encabezado y agregué mi nueva llamada de "pie de página" antes del final de mi etiqueta de cuerpo.


El problema radica en el hecho de que en sus registros la solicitud de cierre de sesión es una solicitud GET.

Started GET "/users/sign_out"

Pero la ruta de salida es un BORRAR

destroy_user_session DELETE /users/sign_out(.:format)

La razón por la que está obteniendo la excepción es que se confunde con una de las rutas creadas por los resources :users que serían algo así como

edit_user GET /users/(:id)(.:format) {:action=>"edit", :controller=>"users"}

Básicamente, ''sign_out'' se está confundiendo con un id.

No estoy seguro de por qué el enlace de eliminación no se está procesando como una solicitud DELETE. Aunque cambiando

config.sign_out_via = :delete

to be :get podría resolver el problema.


Esta es una pregunta antigua, pero la respuesta aceptada no es la forma adecuada de resolver este problema (aunque es un buen diagnóstico del problema).

Cuando me encontré con esto hoy, mi archivo de rutas apareció como:

root :to => ''welcome#index'' resources :users devise_for :users

Como lo mencionó Olives, la declaración de recursos simplemente está haciendo que / usuarios / cualquier cosa tropiece. Simplemente necesitaba revertir el orden de mis rutas ...

root :to => ''welcome#index'' devise_for :users resources :users


Esta es una pregunta antigua, pero quería una forma que no requiriera JavaScript. Rails habilita las solicitudes "DELETE" con una entrada oculta que establece el method para delete . Use un <form> real y deje que Rails genere las entradas ocultas necesarias:

<%= form_for(resource, as: resource_name, url: destroy_user_session_path, html: { method: :delete }) do |f| %> <%= f.submit "Log out" %> <% end %>

Lo anterior genera algo como:

<form accept-charset="UTF-8" action="/users/sign_out" method="post"> <div style="display:none"> <input name="utf8" type="hidden" value="✓"> <input name="_method" type="hidden" value="delete"> <input name="authenticity_token" type="hidden" value="1234"> </div> <input name="commit" type="submit" value="Log out"> </form>


Estoy de acuerdo en que es más reparador utilizar el método http DELETE, me gusta crear un punto final simple para destruir una sesión de usuario con un método GET.

agregando esto a config / route.rb

devise_scope :user do get ''/logout'', :to => ''sessions#destroy'' end


He comprobado todas estas soluciones, pero nadie ha trabajado para mí. Finalmente encontré que en el encabezado eliminé dos líneas, incluidas las etiquetas de aplicación y csrf meta

Por lo tanto, si alguien tiene este problema sin problemas en este momento, verifique si tiene el encabezado de la página (notación HAML)

= javascript_include_tag ''application'' = csrf_meta_tags


La forma correcta de solucionar este problema, REST-sabio, sería cambiar los enlaces de cierre de sesión para usar el método DELETE. Es una solución muy fácil, cambiando esto:

link_to "Log out", destroy_user_session_path

a esto:

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


Necesitas ambos
link_to "Log out", destroy_user_session_path, method: :delete

&& estos incluidos en application.js

//= require jquery //= require jquery_ujs

. Obviamente, no olvide agregar esto a Gemfile si por alguna razón no está allí.

gem ''jquery-rails''


Se requiere jQuery para realizar la solicitud con DELETE. Asegúrate de no haberlo eliminado de tu application.js.


Si está encontrando este problema en la producción y está utilizando la canalización de activos, a menudo necesita:

rake assets:clobber para borrar sus activos públicos. Luego rake assets:precompile antes de cometer y empujar su código (a menos que su push también precompile, también conocido como Heroku).


Si también tiene más de una fuente de jQuery en su aplicación Rails, necesita usar la predeterminada especificada en Gemfile.

Asegúrese de que en su Gemfile tiene esto

gem ''jquery-rails''

y en sus activos no tiene ningún otro archivo fuente de JQuery.

en mi caso tuve un segundo archivo JQuery distinto del predeterminado como se declara en el Gemfile, por lo que causó conflictos.

Si anteriormente tenías esas fuentes, asegúrate de precompilar los activos nuevamente si ya lo habías hecho.


También tiene que verificar, resources :users bajo devise_for :users y es el método de enlace eliminar

link_to "Logout", destroy_user_session_path, method: :delete

Si ambos tienen razón, su botón de cierre de sesión debería funcionar


Tuve el mismo problema con los rieles 3.2 cuando eliminé de application.js esta línea:

//= require jquery_ujs

Entonces, creo que tienes que insertar esta línea en tu application.js si no la tienes allí.

PD. Este comportamiento significa que el adaptador de rieles para jquery no funciona. Por lo tanto, debe asegurarse de que esté cargado en su html en el navegador. Debería probarlo en modo de desarrollo porque habrá comprimido js en producción y será muy difícil encontrar algo allí.


Tuve que hacer esto de una manera diferente, ya que mi application.rb tenía:

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

y seguía fallando. Resulta que necesitaba configurar config.serve_static_assets = true en / environment / development, test y production.rb. Este enlace fue lo que me ayudó a resolverlo.


Ya que el OP mencionó el dispositivo y este problema también me sucedió a mí, solo quería intervenir. @Ross Allen tuvo la respuesta correcta cuando no quiere usar jQuery_ujs. Rails proporciona un par de ayudantes para resolver esto sin jQuery.

Esta es la respuesta de Ross pero usando el modelo de usuario actual de Devise:

<%= form_for(current_user, url: destroy_user_session_path, html: { method: :delete }) do |f| %> <%= f.submit "Log out" %> <% end %>

O el button_to ayuda más button_to que crea una forma similar:

<%= button_to "Log out", destroy_user_session_path, method: :delete %>


la razón puede estar en el orden incorrecto conexión bootstrap-sprockets

el orden correcto:

// app/assets/javascripts/application.js ... //= require jquery //= require jquery_ujs //= require turbolinks //= require bootstrap-sprockets //= require_tree .