Ich baue ein Design auf und muss in der Lage sein, Design-Helfer einzusetzen. Wenn ich before_filter :authenticate_user!
zum Anwendungscontroller hinzufüge, wird die folgende Fehlermeldung angezeigt: undefined method 'authenticate_user!' for #<HomeController:*>
Es ist nicht direkt in meinem Heim-Controller vorhanden, sondern wird vom Anwendungs-Controller geerbt, wenn ich skip_before_filter :authenticate_user!
in meinem Heim (oder einem anderen Controller) verwende und versuche, auf die Seite zuzugreifen.
undefined method `user_signed_in?' for #<#<Class *>
Es bricht in der Zeile ab, die in der Datei layouts/application.html.erb enthalten ist, die es aufruft. Das Gleiche passiert für jeden der Helfer. Es sieht jedoch so aus, als würden sie überhaupt nicht geladen, als ich die Rails -Konsole hochlud und $LOAD_PATH.dup
die enthaltene Ausgabe eingab
"/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"
Es scheint also, dass sie tatsächlich mit Rails beladen werden sollten.
Dies ist mein Anwendungscontroller
klasse ApplicationController <ActionController :: Base
helfer: alle # enthalten immer alle helfer
vor Fälschung schützen
ActionView :: Helpers :: NumberHelper einschließen
before_filter: authenticate_user!ende
Ich habe den Server nach der Installation von devise neu gestartet und mehrere Male versucht, das Problem zu lösen. Wenn weitere Dateien oder Informationen benötigt werden, lassen Sie es mich bitte wissen. Vielen Dank im Voraus.
Bearbeiten: Meine user.rb-Datei wurde angefordert, um zu zeigen, dass ich das Gerät tatsächlich installiert habe
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
Bearbeiten: Die gesamte Fehlermeldung
NoMethodError im HomeController # -Index
undefinierte Methode `authenticate_user! ' für # <HomeController: 0x000000040c45a0> '
Hier ist die vollständige Spur
activesupport (3.2.13) lib/active_support/callbacks.rb: 418: in `run _ 2094683035699451847__process_action _222954693128915811 _ callbacks '
activesupport (3.2.13) lib/active_support/callbacks.rb: 405: in `__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: in `run_callbacks '
actionpack (3.2.13) lib/abstract_controller/callbacks.rb: 17: in `process_action '
actionpack (3.2.13) lib/action_controller/metal/rescue.rb: 29: in `process_action '
actionpack (3.2.13) lib/action_controller/metal/instrumentation.rb: 30: in `block in process_action '
activesupport (3.2.13) lib/active_support/notifications.rb: 123: in `block in instrument '
activesupport (3.2.13) lib/active_support/notifications/instrumenter.rb: 20: in `instrument '
activesupport (3.2.13) lib/active_support/notifications.rb: 123: in `instrument '
actionpack (3.2.13) lib/action_controller/metal/instrumentation.rb: 29: in `process_action '
actionpack (3.2.13) lib/action_controller/metal/params_wrapper.rb: 207: in `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: in `dispatch '
actionpack (3.2.13) lib/action_controller/metal/rack_delegation.rb: 14: in `dispatch '
actionpack (3.2.13) lib/action_controller/metal.rb: 246: in `block in action '
actionpack (3.2.13) lib/action_dispatch/routing/route_set.rb: 73: in `call '
actionpack (3.2.13) lib/action_dispatch/routing/route_set.rb: 73: in `dispatch '
actionpack (3.2.13) lib/action_dispatch/routing/route_set.rb: 36: in `call '
journey (1.0.4) lib/journey/router.rb: 68: in `Block in call '
journey (1.0.4) lib/journey/router.rb: 56: in `each '
journey (1.0.4) lib/journey/router.rb: 56: in `call '
actionpack (3.2.13) lib/action_dispatch/routing/route_set.rb: 612: in `call '
warden (1.2.1) lib/warden/manager.rb: 35: in `Block in call '
warden (1.2.1) lib/warden/manager.rb: 34: in `catch '
warden (1.2.1) lib/warden/manager.rb: 34: in `call '
actionpack (3.2.13) lib/action_dispatch/middleware/best_standards_support.rb: 17: in `call '
rack (1.4.5) lib/rack/etag.rb: 23: in `call '
rack (1.4.5) lib/rack/conditionalget.rb: 25: in `call '
actionpack (3.2.13) lib/action_dispatch/middleware/head.rb: 14: in `call '
actionpack (3.2.13) lib/action_dispatch/middleware/params_parser.rb: 21: in `call '
actionpack (3.2.13) lib/action_dispatch/middleware/flash.rb: 242: in `call '
rack (1.4.5) lib/rack/session/abstract/id.rb: 210: in `context '
rack (1.4.5) lib/rack/session/abstract/id.rb: 205: in `call '
actionpack (3.2.13) lib/action_dispatch/middleware/cookies.rb: 341: in `call '
activerecord (3.2.13) lib/active_record/query_cache.rb: 64: in `call '
activerecord (3.2.13) lib/active_record/connection_adapters/abstract/connection_pool.rb: 479: in `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: in `run _ 177144612565476380 _call _ 4534346825225857812__callbacks '
activesupport (3.2.13) lib/active_support/callbacks.rb: 405: in `__run_callback '
activesupport (3.2.13) lib/active_support/callbacks.rb: 385: in `_run_call_callbacks '
activesupport (3.2.13) lib/active_support/callbacks.rb: 81: in `run_callbacks '
actionpack (3.2.13) lib/action_dispatch/middleware/callbacks.rb: 27: in `call '
actionpack (3.2.13) lib/action_dispatch/middleware/reloader.rb: 65: in `call '
actionpack (3.2.13) lib/action_dispatch/middleware/remote_ip.rb: 31: in `call '
actionpack (3.2.13) lib/action_dispatch/middleware/debug_exceptions.rb: 16: in `call '
actionpack (3.2.13) lib/action_dispatch/middleware/show_exceptions.rb: 56: in `call '
railties (3.2.13) lib/Rails/rack/logger.rb: 32: in `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: in `tagged '
railties (3.2.13) lib/Rails/rack/logger.rb: 16: in `call '
actionpack (3.2.13) lib/action_dispatch/middleware/request_id.rb: 22: in `call '
rack (1.4.5) lib/rack/methodoverride.rb: 21: in `call '
rack (1.4.5) lib/rack/runtime.rb: 17: in `call '
activesupport (3.2.13) lib/active_support/cache/strategy/local_cache.rb: 72: in `call '
rack (1.4.5) lib/rack/lock.rb: 15: in `call '
actionpack (3.2.13) lib/action_dispatch/middleware/static.rb: 63: in `call '
railties (3.2.13) lib/Rails/engine.rb: 479: in `call '
railties (3.2.13) lib/Rails/application.rb: 223: in `call '
railties (3.2.13) lib/Rails/railtie/configure.rb: 30: in `method_missing '
passenger (4.0.2) lib/phusion_passenger/rack/thread_handler_extension.rb: 77: in `process_request '
passenger (4.0.2) lib/phusion_passenger/request_handler/thread_handler.rb: 135: in `accept_and_process_next_request '
passenger (4.0.2) lib/phusion_passenger/request_handler/thread_handler.rb: 106: in `main_loop '
passenger (4.0.2) lib/phusion_passenger/request_handler.rb: 449: in `block (4 Ebenen) in start_threads '
passenger (4.0.2) lib/phusion_passenger/utils/robust_interruption.rb: 108: in "disable_interruptions"
passenger (4.0.2) lib/phusion_passenger/request_handler.rb: 444: in `block (3 Ebenen) in start_threads '
Bearbeiten: Dies ist der Text vom Ausführen von Devise.helpers in der Konsole.
$ Rails Konsole
Entwicklungsumgebung laden (Rails 3.2.13)
1.9.3-p429: 001> Entwicklungshelfer
=> # <Set: {Devise :: Controllers :: Helpers}>
Bearbeiten: Diese meine Routen rb-Datei. : Application.routes.draw tun
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
Stellen Sie sicher, dass Sie devise_for :user
in Ihren routes.rb
einfügen.
Weitere Informationen finden Sie hier: https://stackoverflow.com/a/11180576
Starten Sie einfach Ihren Rails-Server neu.
"Beachten Sie, dass Sie Ihre App hier neu starten sollten, wenn Sie sie bereits gestartet haben. Andernfalls treten seltsame Fehler auf, z. B. dass Benutzer sich nicht anmelden können und die Routen-Helfer undefiniert sind." [Erste Schritte Anweisungen]
[edit] Ausführlichere Antwort:
Bitte überprüfen Sie zwei weitere Dinge: Ihr HomeController sollte von Devise :: Controllers :: Helpers erben. Und die Devise-Direktive in route.rb (die die fehlende Methode in Helpers generiert) sollte die Devise-Zuordnungen erweitert haben. Der folgende Code kann dies überprüfen:
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
Um ein ähnliches Problem in einer arbeitenden Rails-Anwendung einzuführen, müssen die Einträge config/initializers/devise.rb und config/routes.rb deaktiviert und Rails neu gestartet werden. Durch die erneute Aktivierung des Codes wird das Problem nicht behoben, wenn Rails nicht neu gestartet wird.
Es gibt viele Dinge, die schief gehen können. Einige Dinge, die in dieser Reihenfolge überprüft werden müssen:
before_filter :authenticate_user!
nicht aufrufen können, bedeutet dies, dass Gerät nicht richtig eingerichtet ist. devise_for :users
in routen.rb hinzu (es ist user s , Sie haben dieses Recht), und vereinfachen Sie als Nächstes diese Bereichsregeln für das Testen.before_filter :authenticate_user!
muss funktionieren, damit die Helfer in die Steuerung gelangen oder die Helfer manuell eingebunden werdenhelper_method "current_user", "user_signed_in?", "user_session"
self.controller.current_user
in Ihrem Computer? Dies würde bedeuten, dass die helper_methods nicht enthalten sind.Ich habe diese Zeile zu meinem Controller hinzugefügt, der den Trick für mich gemacht hat:
include Devise::Controllers::Helpers
Ich hatte das gleiche Problem, wenn ich die Anleitung für den ersten Start von Devise befolgte.
Es stellte sich heraus, dass ich Rails generate model User
statt Rails generate devise User
fälschlicherweise ausgeführt hatte, wodurch ein reines ActiveRecord-Modell erstellt wurde, das zufällig den Namen 'User' hatte.
Ich hatte das gleiche Problem (Rails 5.1.2, Devise 4.3.0) und zufällig benutzte ich: -
devise_for :user do
...
end
anstatt
devise_for :users do
...
end
Ich habe es durch Ändern des Namensraums behoben.
benutzer => Benutzer