Неопределенный метод `[]' для nil:NilClass для Warden

У меня есть вспомогательный модуль следующим образом. В модуле используется надзиратель.

module V0
  module Api
    # @private
    module Helpers
      def warden
        env['warden']
      end

      # Used to require an authenticated user for a particular action.
      def protected!
        warden.authenticate!
      end

      def current_user
        warden.user
      end

      def parse_json_body
        request.body.rewind
        request_body = current_user ? current_user.keychain_replace(request.body.read) : request.body.read
        @parsed_body = JSON.parse(request_body, symbolize_names: true)
        params.update @parsed_body
      end
    end
  end
end

Модуль анализирует запрос. В линии

request_body = current_user ? current_user.keychain_replace(request.body.read) : request.body.read

Я попытался проверить, установлен ли текущий пользователь, и соответственно получить request_body. Однако я получаю следующие ошибки.

NoMethodError:
       undefined method `[]' for nil:NilClass
     # (eval):2:in `method_missing'
     # ./app/api/v0/helpers.rb:11:in `warden'
     # ./app/api/v0/helpers.rb:23:in `current_user'
     # ./app/api/v0/helpers.rb:37:in `parse_json_body'

Если текущий пользователь не установлен, он должен был установить

request_body = request.body.read

но я не понимаю этого


person Nishan Hitang    schedule 05.08.2014    source источник


Ответы (2)


Вместо

request_body = current_user ? current_user.key ..

пытаться

request_body = !current_user.nil? ? current_user.key ..

Это позволило бы оценить истинный/ложный ответ. Я поставил ! in, чтобы сохранить порядок ваших аргументов.

Это немного догадка, но я думаю, что она оценивает ноль, а не ищет ложные свойства.

person Tim    schedule 05.08.2014
comment
Это тоже не сработало. Пытаетесь использовать current_user.nil? сам вызывает ошибку - person Nishan Hitang; 05.08.2014

Проблема, кажется, заключается в вашем методе warden. Переменная env там nil. Проверьте, правильно ли загружен ваш модуль.

person Stobbej    schedule 05.08.2014