Je suis en train de mettre en place le système et je dois être capable d’utiliser les assistants du système. Lorsque j'ajoute before_filter :authenticate_user!
dans le contrôleur d'application, l'erreur suivante undefined method 'authenticate_user!' for #<HomeController:*>
Il n’est pas présent dans mon contrôleur domestique directement, mais hérité du contrôleur d’application, si j’utilise skip_before_filter :authenticate_user!
dans mon domicile (ou n’importe quel contrôleur) et que je tente d’accéder à la page, l’erreur suivante.
undefined method `user_signed_in?' for #<#<Class *>
Il se rompt sur la ligne qui l’appelle dans le fichier layouts/application.html.erb. Les mêmes choses se produisent pour tous les assistants. On dirait qu’ils ne sont pas chargés du tout, cependant, lorsque j’ai chargé la console Rails, et que j’ai entré $LOAD_PATH.dup
la sortie incluse.
"/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"
Il semble donc qu’ils devraient effectivement être chargés par Rails.
Ceci est mon contrôleur d'application
classe ApplicationController <ActionController :: Base
helper: all # inclut tous les assistants, tout le temps
protect_from_forgery
inclut ActionView :: Helpers :: NumberHelper
before_filter: authenticate_user!fin
J'ai redémarré le serveur après avoir installé le logiciel et plusieurs fois au cours de différentes tentatives pour résoudre le problème. Si vous avez besoin de plus de fichiers ou d'informations, faites-le moi savoir. Merci beaucoup d'avance.
Edit: Mon fichier user.rb a été demandé pour montrer que j’ai bien installé
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
Edit: le message d'erreur entier
NoMethodError dans HomeController # index
méthode non définie `authenticate_user! ' pour # <HomeController: 0x000000040c45a0> '
Voici la trace complète
actifsupport (3.2.13) lib/active_support/callbacks.rb: 418: dans `run _ 20946830359999181847__process_action _222954693128915811 _ callbacks '
actifsupport (3.2.13) lib/active_support/callbacks.rb: 405: dans `__run_callback '
actifsupport (3.2.13) lib/active_support/callbacks.rb: 385: in> `_run_process_action_callbacks '
actifsupport (3.2.13) lib/active_support/callbacks.rb: 81: dans `run_callbacks '
actionpack (3.2.13) lib/abstract_controller/callbacks.rb: 17: dans `process_action '
actionpack (3.2.13) lib/action_controller/metal/rescue.rb: 29: dans `process_action '
actionpack (3.2.13) lib/action_controller/metal/instrumentation.rb: 30: in `block in process_action '
actifsupport (3.2.13) lib/active_support/notifications.rb: 123: in `block in instrument '
actifsupport (3.2.13) lib/active_support/notifications/instrumenter.rb: 20: dans `instrument '
actifsupport (3.2.13) lib/active_support/notifications.rb: 123: dans `instrument '
actionpack (3.2.13) lib/action_controller/metal/instrumentation.rb: 29: dans `process_action '
actionpack (3.2.13) lib/action_controller/metal/params_wrapper.rb: 207: dans `process_action '
actionpack (3.2.13) lib/abstract_controller/base.rb: 121: in `process '
actionpack (3.2.13) lib/abstract_controller/rendering.rb: 45: in `process '
actionpack (3.2.13) lib/action_controller/metal.rb: 203: dans `dispatch '
actionpack (3.2.13) lib/action_controller/metal/rack_delegation.rb: 14: dans `dispatch '
actionpack (3.2.13) lib/action_controller/metal.rb: 246: dans `block in action '
actionpack (3.2.13) lib/action_dispatch/routing/route_set.rb: 73: dans `call '
actionpack (3.2.13) lib/action_dispatch/routing/route_set.rb: 73: dans `dispatch '
actionpack (3.2.13) lib/action_dispatch/routing/route_set.rb: 36: dans `call '
journey (1.0.4) lib/journey/router.rb: 68: in `block in call '
journey (1.0.4) lib/journey/router.rb: 56: dans `each '
journey (1.0.4) lib/journey/router.rb: 56: dans `call '
actionpack (3.2.13) lib/action_dispatch/routing/route_set.rb: 612: dans `call '
gardien (1.2.1) lib/warden/manager.rb: 35: in `block in call '
gardien (1.2.1) lib/warden/manager.rb: 34: dans `catch '
warden (1.2.1) lib/warden/manager.rb: 34: dans `call '
actionpack (3.2.13) lib/action_dispatch/middleware/best_standards_support.rb: 17: dans `call '
rack (1.4.5) lib/rack/etag.rb: 23: dans `call '
rack (1.4.5) lib/rack/conditionalget.rb: 25: dans `call '
actionpack (3.2.13) lib/action_dispatch/middleware/head.rb: 14: dans `call '
actionpack (3.2.13) lib/action_dispatch/middleware/params_parser.rb: 21: dans `call '
actionpack (3.2.13) lib/action_dispatch/middleware/flash.rb: 242: dans `call '
rack (1.4.5) lib/rack/session/abstract/id.rb: 210: dans le "contexte"
rack (1.4.5) lib/rack/session/abstract/id.rb: 205: dans `call '
actionpack (3.2.13) lib/action_dispatch/middleware/cookies.rb: 341: dans `call '
activerecord (3.2.13) lib/active_record/query_cache.rb: 64: dans `call '
activerecord (3.2.13) lib/active_record/connection_adapters/abstract/connection_pool.rb: 479: dans `call '
actionpack (3.2.13) lib/action_dispatch/middleware/callbacks.rb: 28: dans `block in call '
actifsupport (3.2.13) lib/active_support/callbacks.rb: 405: dans `exécution _ 177144612565476380 _appel _ 4534346825225857812__callbacks '
actifsupport (3.2.13) lib/active_support/callbacks.rb: 405: dans `__run_callback '
actifsupport (3.2.13) lib/active_support/callbacks.rb: 385: dans `_run_call_callbacks '
actifsupport (3.2.13) lib/active_support/callbacks.rb: 81: dans `run_callbacks '
actionpack (3.2.13) lib/action_dispatch/middleware/callbacks.rb: 27: dans `call '
actionpack (3.2.13) lib/action_dispatch/middleware/reloader.rb: 65: dans `call '
actionpack (3.2.13) lib/action_dispatch/middleware/remote_ip.rb: 31: dans `call '
actionpack (3.2.13) lib/action_dispatch/middleware/debug_exceptions.rb: 16: dans `call '
actionpack (3.2.13) lib/action_dispatch/middleware/show_exceptions.rb: 56: dans `call '
rails (3.2.13) lib/Rails/rack/logger.rb: 32: dans `call_app '
railties (3.2.13) lib/Rails/rack/logger.rb: 16: en "bloc en appel"
actifsupport (3.2.13) lib/active_support/tagged_logging.rb: 22: dans `tagged '
rails (3.2.13) lib/Rails/rack/logger.rb: 16: dans `call '
actionpack (3.2.13) lib/action_dispatch/middleware/request_id.rb: 22: dans `call '
rack (1.4.5) lib/rack/methodoverride.rb: 21: dans `call '
rack (1.4.5) lib/rack/runtime.rb: 17: dans `call '
actifsupport (3.2.13) lib/actif_support/cache/strategie/local_cache.rb: 72: dans `call '
rack (1.4.5) lib/rack/lock.rb: 15: dans `call '
actionpack (3.2.13) lib/action_dispatch/middleware/static.rb: 63: dans `call '
rails (3.2.13) lib/Rails/engine.rb: 479: dans `call '
rails (3.2.13) lib/Rails/application.rb: 223: dans `call '
rails (3.2.13) lib/Rails/railtie/configurable.rb: 30: dans `method_missing '
passagers (4.0.2) lib/phusion_passenger/rack/thread_handler_extension.rb: 77: dans `process_request '
passagers (4.0.2) lib/phusion_passenger/request_handler/thread_handler.rb: 135: dans `accept_and_process_next_request '
passagers (4.0.2) lib/phusion_passenger/request_handler/thread_handler.rb: 106: dans `main_loop '
passagers (4.0.2) lib/phusion_passenger/request_handler.rb: 449: en `bloc (4 niveaux) dans start_threads '
passagers (4.0.2) lib/phusion_passenger/utils/robust_interruption.rb: 108: dans `disable_interruptions '
passagers (4.0.2) lib/phusion_passenger/request_handler.rb: 444: dans le bloc `(3 niveaux) dans start_threads '
Edit: Ceci est le texte de l'exécution de Devise.helpers dans la console.
$ Rails console
Chargement de l'environnement de développement (Rails 3.2.13)
1.9.3-p429: 001> Devise.helpers
=> # <Set: {Devise :: Controllers :: Helpers}>
Edit: Ceci est mon fichier route 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
Assurez-vous d'ajouter devise_for :user
dans votre routes.rb
Voir plus ici: https://stackoverflow.com/a/11180576
Redémarrez simplement votre serveur Rails.
"Notez que vous devez redémarrer votre application ici si vous l'avez déjà démarrée . Sinon, vous rencontrerez d'étranges erreurs, telles que des utilisateurs incapables de se connecter et des aides de routage indéfinies." [Instructions de mise en route]
[edit] Réponse plus détaillée:
Veuillez vérifier deux choses supplémentaires: Votre HomeController doit hériter de Devise :: Controllers :: Helpers. Et la directive de calcul dans route.rb (qui génère la méthode manquante dans Helpers) devrait avoir étendu Devise. @@ mappings. Le code suivant peut vérifier ceci:
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
Pour introduire un problème similaire dans une application Rails en fonctionnement, les entrées config/initializers/invent.rb et config/routes.rb doivent être désactivées et Rails doit être redémarré. La réactivation du code ne résoudra pas le problème à moins que Rails ne soit redémarré.
Il y a beaucoup de choses qui peuvent aller mal. Quelques points à vérifier dans l'ordre:
before_filter :authenticate_user!
indique que le périphérique n'est pas configuré correctement. devise_for :users
dans routes.rb (il s’agit de l’utilisateur s , vous avez ce droit), puis simplifiez les règles de portée pour les tests.before_filter :authenticate_user!
doit fonctionner pour que les assistants se trouvent dans le contrôleur ou les inclure manuellement.helper_method "current_user", "user_signed_in?", "user_session"
self.controller.current_user
fonctionne dans votre erb? Cela indiquerait que les méthodes helper_ ne sont pas incluses.J'ai ajouté cette ligne à mon contrôleur qui a fait le tour pour moi:
include Devise::Controllers::Helpers
J'ai eu le même problème en suivant le guide de démarrage de Devise.
Il s’est avéré que j’avais exécuté par erreur Rails generate model User
plutôt que Rails generate devise User
, ce qui venait de créer un modèle ActiveRecord en clair portant le nom «User».
J'ai eu le même problème (Rails 5.1.2, Devise 4.3.0) et il se trouve que j'utilisais: -
devise_for :user do
...
end
au lieu de
devise_for :users do
...
end
Je l'ai corrigé en changeant l'espace de noms.
utilisateur => utilisateurs