Rails: Nicht definierte Methode 'to_sym'
-
20-09-2019 - |
Frage
Ich erhalte die folgenden Fehler in meinem Einsatz Rails 2.3.5 Anwendung:
NoMethodError (nicht definierte Methode `to_sym‘ für nil: NilClass):
Meine lokalen Testen der Anwendung installieren, die SQLite verwendet, erhalten den Fehler nicht, aber mein Einsatz App läuft Mysql tut. Der einzige andere Unterschied zwischen den beiden ist, ich Ruby-1.8.7 auf meinem lokalen Rechner und 1.8.6 auf meinem Deployment Server renne.
Ich habe den Code aus User.rb und das Fehlerprotokoll unten enthalten. Ich habe dies im Anschluss an die deklarative Authorization und Embedded Authorization Railscasts.
Jede Hilfe wäre sehr dankbar!
EDIT: Hier ist der Code für die application_controller, wo ich gesetzt current_user mit before_filter:
class ApplicationController < ActionController::Base
helper :all
helper_method :current_user_session, :current_user
before_filter :set_current_user
protected
def set_current_user
Authorization.current_user = current_user
end
def current_user_session
return @current_user_session if defined?(@current_user_session)
@current_user_session = UserSession.find
end
def current_user
@current_user = current_user_session && current_user_session.record
end
end
-
User.rb:
class User < ActiveRecord::Base
acts_as_authentic
has_many :products
has_many :transactions
ROLES = %w[admin dmstaff staff faculty]
def role_symbols
[role.to_sym]
end
end
Das Fehlerprotokoll:
NoMethodError (undefined method `to_sym' for nil:NilClass):
app/models/user.rb:10:in `role_symbols'
/usr/lib/ruby/gems/1.8/gems/declarative_authorization 0.4/lib/declarative_authorization/authorization.rb:242:in `roles_for'
/usr/lib/ruby/gems/1.8/gems/declarative_authorization-0.4/lib/declarative_authorization/authorization.rb:296:in `user_roles_privleges_from_options'
/usr/lib/ruby/gems/1.8/gems/declarative_authorization-0.4/lib/declarative_authorization/authorization.rb:161:in `permit!'
/usr/lib/ruby/gems/1.8/gems/declarative_authorization-0.4/lib/declarative_authorization/in_controller.rb:580:in `permit!'
/usr/lib/ruby/gems/1.8/gems/declarative_authorization-0.4/lib/declarative_authorization/in_controller.rb:109:in `filter_access_filter'
/usr/lib/ruby/gems/1.8/gems/declarative_authorization-0.4/lib/declarative_authorization/in_controller.rb:109:in `each'
/usr/lib/ruby/gems/1.8/gems/declarative_authorization-0.4/lib/declarative_authorization/in_controller.rb:109:in `all?'
/usr/lib/ruby/gems/1.8/gems/declarative_authorization-0.4/lib/declarative_authorization/in_controller.rb:109:in `filter_access_filter'
passenger (2.2.5) lib/phusion_passenger/rack/request_handler.rb:95:in `process_request'
passenger (2.2.5) lib/phusion_passenger/abstract_request_handler.rb:207:in `main_loop'
passenger (2.2.5) lib/phusion_passenger/railz/application_spawner.rb:378:in `start_request_handler'
passenger (2.2.5) lib/phusion_passenger/railz/application_spawner.rb:336:in `handle_spawn_application'
passenger (2.2.5) lib/phusion_passenger/utils.rb:183:in `safe_fork'
passenger (2.2.5) lib/phusion_passenger/railz/application_spawner.rb:334:in `handle_spawn_application'
passenger (2.2.5) lib/phusion_passenger/abstract_server.rb:352:in `__send__'
passenger (2.2.5) lib/phusion_passenger/abstract_server.rb:352:in `main_loop'
passenger (2.2.5) lib/phusion_passenger/abstract_server.rb:196:in `start_synchronously'
passenger (2.2.5) lib/phusion_passenger/abstract_server.rb:163:in `start'
passenger (2.2.5) lib/phusion_passenger/railz/application_spawner.rb:213:in `start'
passenger (2.2.5) lib/phusion_passenger/spawn_manager.rb:262:in `spawn_rails_application'
passenger (2.2.5) lib/phusion_passenger/abstract_server_collection.rb:126:in `lookup_or_add'
passenger (2.2.5) lib/phusion_passenger/spawn_manager.rb:256:in `spawn_rails_application'
passenger (2.2.5) lib/phusion_passenger/abstract_server_collection.rb:80:in `synchronize'
passenger (2.2.5) lib/phusion_passenger/abstract_server_collection.rb:79:in `synchronize'
passenger (2.2.5) lib/phusion_passenger/spawn_manager.rb:255:in `spawn_rails_application'
passenger (2.2.5) lib/phusion_passenger/spawn_manager.rb:154:in `spawn_application'
passenger (2.2.5) lib/phusion_passenger/spawn_manager.rb:287:in `handle_spawn_application'
passenger (2.2.5) lib/phusion_passenger/abstract_server.rb:352:in `__send__'
passenger (2.2.5) lib/phusion_passenger/abstract_server.rb:352:in `main_loop'
passenger (2.2.5) lib/phusion_passenger/abstract_server.rb:196:in `start_synchronously'
Rendering /var/data/app/current/public/500.html (500 Internal Server Error)
Lösung
def role_symbols
[role.to_sym]
end
-> role
ist Nil
. Haben Sie role
irgendwo definieren?
Andere Tipps
An einem gewissen Punkt, Ihr Code erwartet ein Objekt vom Typ User
, sondern wird immer nil
statt. Sind Sie so etwas wie dies zu tun?
@user = User.find_by_login("Mary")
@user.role_symbols
Wo, "Mary" ist eine nicht vorhandene Benutzer-Login? Stellen Sie alle Orte, an denen Sie die role_symbols Methode anrufen und wir können mehr helfen.
Edit: bei der Methode der Suche #roles_for hier , ohne zu tief in das Plugin zu graben, ich würde sagen, dass #current_user an dieser Stelle nicht Ihre Codeausführung festgelegt ist.
Rollen Attribut wurde nicht auf dem Tisch gesetzt. Sie haben einen Rettungs-Code zu verwenden, und überprüfen Sie, warum dies geschieht.
Test, wenn 'Rolle' Wert vor Aufruf role.to_sym gefassten wird.