سؤال

أحصل على الخطأ التالي في تطبيق 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.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top