ruby on rails - tutorial - Devise Helpers(authenticate_user! Current_user, user_signed_in?) No inicializados
rspec rails devise (6)
Agregué esta línea a mi controlador que hizo el truco para mí:
include Devise::Controllers::Helpers
Estoy configurando el dispositivo y necesito poder usar dispositivos de ayuda. Cuando agrego before_filter :authenticate_user!
en el controlador de la aplicación obtengo el siguiente undefined method ''authenticate_user!'' for #<HomeController:*>
error undefined method ''authenticate_user!'' for #<HomeController:*>
undefined method ''authenticate_user!'' for #<HomeController:*>
No está presente en el controlador de mi casa directamente, pero se hereda del controlador de la aplicación, si uso skip_before_filter :authenticate_user!
en mi casa (o en cualquier controlador) y al intentar acceder a la página, aparece el siguiente error.
undefined method `user_signed_in?'' for #<#<Class *>
Se rompe en la línea que en el archivo layouts / application.html.erb que lo llama. Lo mismo sucede con cualquiera de los ayudantes. Sin embargo, parece que no se cargaron en absoluto, cuando $LOAD_PATH.dup
la consola de los rieles e $LOAD_PATH.dup
"/usr/local/rvm/gems/ruby-1.9.3-p429/gems/devise-2.2.4/lib", "/usr/local/rvm/gems/ruby-1.9.3-p429/gems/devise-2.2.4/app/controllers", "/usr/local/rvm/gems/ruby-1.9.3-p429/gems/devise-2.2.4/app/helpers", "/usr/local/rvm/gems/ruby-1.9.3-p429/gems/devise-2.2.4/app/mailers"
Así que parece que de hecho deberían ser cargados por rieles.
Este es mi controlador de aplicaciones.
clase ApplicationController <ActionController :: Base
ayudante: todos # incluyen todos los ayudantes, todo el tiempo
proteger desde
incluye ActionView :: Helpers :: NumberHelper
antes_filter: authenticate_user!fin
Reinicié el servidor después de instalar el dispositivo, y varias veces mientras intentaba diferentes intentos para resolver el problema. Si necesita más archivos o información, por favor hágamelo saber. Muchas gracias por adelantado.
Edición: se solicitó a mi archivo user.rb que muestre que efectivamente he instalado el dispositivo
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :token_authenticatable, :confirmable,
# :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable,
:encryptable, :encryptor => :restful_authentication_sha1
# Setup accessible (or protected) attributes for your model
attr_accessible :email, :password, :password_confirmation, :remember_me
end
Editar: El mensaje de error completo
NoMethodError en HomeController # index
método indefinido `authenticate_user! '' para # <HomeController: 0x000000040c45a0> ''
Aquí está la huella completa
activesupport (3.2.13) lib / active_support / callbacks.rb: 418: en ` ejecute _2094683035699451847__process_action_ 2229546931289158113 _callbacks ''
activesupport (3.2.13) lib / active_support / callbacks.rb: 405: en `__run_callback ''
activesupport (3.2.13) lib / active_support / callbacks.rb: 385: in> `_run_process_action_callbacks ''
activesupport (3.2.13) lib / active_support / callbacks.rb: 81: en `run_callbacks ''
actionpack (3.2.13) lib / abstract_controller / callbacks.rb: 17: en `process_action ''
actionpack (3.2.13) lib / action_controller / metal / rescue.rb: 29: en `process_action ''
actionpack (3.2.13) lib / action_controller / metal / instrumentation.rb: 30: en `bloque en process_action ''
activesupport (3.2.13) lib / active_support / notifications.rb: 123: en `block in instrument ''
activesupport (3.2.13) lib / active_support / notifications / instrumenter.rb: 20: en `instrument ''
activesupport (3.2.13) lib / active_support / notifications.rb: 123: en `instrumento ''
actionpack (3.2.13) lib / action_controller / metal / instrumentation.rb: 29: en `process_action ''
actionpack (3.2.13) lib / action_controller / metal / params_wrapper.rb: 207: en `process_action ''
actionpack (3.2.13) lib / abstract_controller / base.rb: 121: en `proceso ''
actionpack (3.2.13) lib / abstract_controller / rendering.rb: 45: en `proceso ''
actionpack (3.2.13) lib / action_controller / metal.rb: 203: en `dispatch ''
actionpack (3.2.13) lib / action_controller / metal / rack_delegation.rb: 14: en `dispatch ''
actionpack (3.2.13) lib / action_controller / metal.rb: 246: en `bloque en acción ''
actionpack (3.2.13) lib / action_dispatch / routing / route_set.rb: 73: en `call ''
actionpack (3.2.13) lib / action_dispatch / routing / route_set.rb: 73: en `dispatch ''
actionpack (3.2.13) lib / action_dispatch / routing / route_set.rb: 36: en `call ''
viaje (1.0.4) lib / journey / router.rb: 68: en `bloquear en llamada ''
viaje (1.0.4) lib / journey / router.rb: 56: en ''cada''
journey (1.0.4) lib / journey / router.rb: 56: en `call ''
actionpack (3.2.13) lib / action_dispatch / routing / route_set.rb: 612: en `call ''
Guardián (1.2.1) lib / warden / manager.rb: 35: en `bloquear en llamada ''
Guardián (1.2.1) lib / warden / manager.rb: 34: en `catch ''
Guardián (1.2.1) lib / warden / manager.rb: 34: en `call ''
actionpack (3.2.13) lib / action_dispatch / middleware / best_standards_support.rb: 17: en `call ''
rack (1.4.5) lib / rack / etag.rb: 23: en `call ''
rack (1.4.5) lib / rack / conditionalget.rb: 25: en `call ''
actionpack (3.2.13) lib / action_dispatch / middleware / head.rb: 14: en `call ''
actionpack (3.2.13) lib / action_dispatch / middleware / params_parser.rb: 21: en `call ''
actionpack (3.2.13) lib / action_dispatch / middleware / flash.rb: 242: en `call ''
rack (1.4.5) lib / rack / session / abstract / id.rb: 210: en `contexto ''
rack (1.4.5) lib / rack / session / abstract / id.rb: 205: en `call ''
actionpack (3.2.13) lib / action_dispatch / middleware / cookies.rb: 341: en `call ''
activerecord (3.2.13) lib / active_record / query_cache.rb: 64: en `call ''
activerecord (3.2.13) lib / active_record / connection_adapters / abstract / connection_pool.rb: 479: en `call ''
actionpack (3.2.13) lib / action_dispatch / middleware / callbacks.rb: 28: in `block in call ''
activesupport (3.2.13) lib / active_support / callbacks.rb: 405: en ` ejecute _177144612565476380_ call _4534346825225857812__callbacks ''
activesupport (3.2.13) lib / active_support / callbacks.rb: 405: en `__run_callback ''
activesupport (3.2.13) lib / active_support / callbacks.rb: 385: en `_run_call_callbacks ''
activesupport (3.2.13) lib / active_support / callbacks.rb: 81: en `run_callbacks ''
actionpack (3.2.13) lib / action_dispatch / middleware / callbacks.rb: 27: en `call ''
actionpack (3.2.13) lib / action_dispatch / middleware / reloader.rb: 65: en `call ''
actionpack (3.2.13) lib / action_dispatch / middleware / remote_ip.rb: 31: en `call ''
actionpack (3.2.13) lib / action_dispatch / middleware / debug_exceptions.rb: 16: en `call ''
actionpack (3.2.13) lib / action_dispatch / middleware / show_exceptions.rb: 56: en `call ''
railties (3.2.13) lib / rails / rack / logger.rb: 32: en `call_app ''
railties (3.2.13) lib / rails / rack / logger.rb: 16: in `block in call ''
activesupport (3.2.13) lib / active_support / tagged_logging.rb: 22: en `etiquetado ''
railties (3.2.13) lib / rails / rack / logger.rb: 16: in `call ''
actionpack (3.2.13) lib / action_dispatch / middleware / request_id.rb: 22: en `call ''
rack (1.4.5) lib / rack / methodoverride.rb: 21: en `call ''
rack (1.4.5) lib / rack / runtime.rb: 17: en `call ''
activesupport (3.2.13) lib / active_support / cache / strategy / local_cache.rb: 72: en `call ''
rack (1.4.5) lib / rack / lock.rb: 15: en `call ''
actionpack (3.2.13) lib / action_dispatch / middleware / static.rb: 63: en `call ''
railties (3.2.13) lib / rails / engine.rb: 479: en `call ''
railties (3.2.13) lib / rails / application.rb: 223: in `call ''
railties (3.2.13) lib / rails / railtie / configurable.rb: 30: en `method_missing ''
pasajero (4.0.2) lib / phusion_passenger / rack / thread_handler_extension.rb: 77: en `process_request ''
pasajero (4.0.2) lib / phusion_passenger / request_handler / thread_handler.rb: 135: en `accept_and_process_next_request ''
pasajero (4.0.2) lib / phusion_passenger / request_handler / thread_handler.rb: 106: en `main_loop ''
pasajero (4.0.2) lib / phusion_passenger / request_handler.rb: 449: en `bloque (4 niveles) en start_threads ''
pasajero (4.0.2) lib / phusion_passenger / utils / robust_interruption.rb: 108: en `disable_interruptions ''
pasajero (4.0.2) lib / phusion_passenger / request_handler.rb: 444: en `bloque (3 niveles) en start_threads ''
Editar: Este es el texto de ejecutar Devise.helpers en la consola.
$ rieles de consola
Cargando entorno de desarrollo (Rails 3.2.13)
1.9.3-p429: 001> Devise.helpers
=> # <Set: {Devise :: Controllers :: Helpers}>
Edit: Este mi archivo de rutas de rb. : Application.routes.draw do
devise_for :users
resource :sessions, :only => [:new, :create, :destroy]
devise_scope :user do
match ''signup'' => ''users#new'', :as => :signup
match ''register'' => ''users#create'', :as => :register
match ''/login'' => ''sessions#new'', :as => :login
match ''logout'' => ''sessions#destroy'', :as => :logout
end
match ''/activate/:activation_code'' => ''users#activate'', :as => :activate, :activation_code => nil
match ''/users/:id'', :to => ''users#show'', :as => :user
resources :users do
member do
put :suspend
put :unsuspend
delete :purge
end
end
resource :sessions
other resources
match '''' => ''home#index'', :as => :home
match '':controller(/:action(/:id))''
root to: ''home#index''
end
Asegúrese de agregar devise_for :user
en sus routes.rb
Ver más aquí: https://.com/a/11180576
Hay muchas cosas que pueden salir mal. Algunas cosas para comprobar en orden:
- No poder llamar a
before_filter :authenticate_user!
indica que el dispositivo no está correctamente configurado. - Agregue
devise_for :users
en route.rb (es el usuario, tiene este derecho), a continuación simplifique las reglas de alcance para las pruebas. - Necesitas tener el
before_filter :authenticate_user!
trabajando para obtener los ayudantes en el controlador o incluirlos manualmente - Si su controlador base no hereda de ActionController, entonces debe agregar los métodos de ayuda manualmente: Ponga esto en su controlador base
helper_method "current_user", "user_signed_in?", "user_session"
- Una cosa para verificar: ¿
self.controller.current_user
funciona en su erb? Esto indicaría que los métodos helper no están incluidos.
Simplemente reinicie su servidor de rieles.
"Tenga en cuenta que debe reiniciar su aplicación aquí si ya la ha iniciado. De lo contrario, se encontrarán con errores extraños, como que los usuarios no puedan iniciar sesión y que los ayudantes de ruta no estén definidos". [Instrucciones de inicio]
[editar] Respuesta más detallada:
Verifique dos cosas adicionales: su HomeController debe heredar de Devise :: Controllers :: Helpers. Y la directiva de dispositivos en route.rb (que genera el método faltante en los Helpers) debe tener una versión de Devise. @@ mappings extendida. El siguiente código puede verificar esto:
class ApplicationController ...
...
before_filter do
fail "bad ancestor" unless self.kind_of?(Devise::Controllers::Helpers)
fail "no mapping" unless Devise.class_variable_get(:@@mappings).[:user]
authenticate_user!
end
end
Para introducir un problema similar en una aplicación de rieles de trabajo, las entradas config / initializers / devise.rb y config / route.rb deben estar deshabilitadas y los rieles deben reiniciarse. Volver a habilitar el código no solucionará el problema a menos que se reinicien los rieles.
Tuve el mismo problema (Rails 5.1.2, Devise 4.3.0) y resultó que estaba usando:
devise_for :user do
...
end
en lugar de
devise_for :users do
...
end
Lo arreglé cambiando el espacio de nombres.
usuario => usuarios
Tuve el mismo problema siguiendo la guía de inicio de Devise.
Resulta que, erróneamente, había ejecutado rails generate model User
lugar de rails generate devise User
, que acaba de crear un modelo de ActiveRecord simple que tenía el nombre de "usuario".