القضبان: طريقة غير محددة "to_sym"
-
20-09-2019 - |
سؤال
أحصل على الخطأ التالي في تطبيق Rails 2.3.5 المنشور:
nomethoderror (الطريقة غير المحددة "to_sym" لـ nil: nilclass):
لا يحصل تثبيت الاختبار المحلي على التطبيق ، والذي يستخدم SQLite ، على الخطأ ، لكن تطبيقي المنشور الذي يعمل MySQL يفعل. الفرق الآخر الوحيد بين الاثنين هو أنني أقوم بتشغيل Ruby 1.8.7 على الجهاز المحلي الخاص بي و 1.8.6 على خادم النشر الخاص بي.
لقد قمت بتضمين الرمز من user.rb وسجل الخطأ أدناه. لقد قمت بإعداد هذا بعد التصريح التعريفي وموقد التصريح المدمج.
أي مساعدة سيكون موضع تقدير كبير!
تحرير: إليك الرمز الخاص بـ Application_Controller ، حيث قمت بتعيين Current_user باستخدام قبل _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
سجل الخطأ:
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)
المحلول
def role_symbols
[role.to_sym]
end
-> role
هو Nil
. هل تحدد role
مكان ما؟
نصائح أخرى
في مرحلة ما ، يتوقع الكود الخاص بك كائن من النوع User
, ، لكنه يحصل nil
في حين أن. هل تفعل أي شيء مثل هذا؟
@user = User.find_by_login("Mary")
@user.role_symbols
أين ، "ماري" هو تسجيل الدخول إلى مستخدم غير موجود؟ انشر أي أماكن تتصل فيها طريقة rob_symbols ويمكننا المساعدة أكثر.
تعديل: النظر في الطريقة #ROLES_FOR هنا, ، دون الحفر بعمق في هذا البرنامج المساعد ، أود أن أقول إن #Current_user لم يتم تعيينه في هذه المرحلة من تنفيذ التعليمات البرمجية.
لم يتم تعيين سمة الدور على الجدول. يجب عليك استخدام رمز الإنقاذ ، وتفقد سبب حدوث ذلك.
اختبار إذا تم تعيين قيمة "الدور" قبل استدعاء دور. to_sym.