我有一个Helper模块如下。该模块使用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
但我没有得到这个
答案 0 :(得分:1)
而不是
request_body = current_user ? current_user.key ..
试
request_body = !current_user.nil? ? current_user.key ..
那会得到一个真/假的回应来评价..我把它!保持你的论点的顺序。
这是一个猜测,但我认为它正在评估一个零,而不是寻找虚假属性..
答案 1 :(得分:0)
问题似乎在于您的warden
方法。那里的env
变量为nil
。检查模块是否正确加载。