'parse_response':nil:NilClass (NoMethodError) 的未定义方法 'new'



我想实现基于状态代码的错误。我试图实现此代码:

def parse_response
    system_errors = { }
    (100..199).each do |current|
      system_errors[current.to_s] = SystemError
    end
    (200..999).each do |current|
      system_errors[current.to_s] = CommunicationError
    end
    return params_for_success if successful_response?
    # pp system_errors
    pp payment_response
    if valid?
      raise system_errors[340].new(technical_message, response_code)
    else
      raise errors.full_messages.join(";n")
    end
  end
  def successful_response?
    response_code == RESPONSE_CODE_FOR_SUCCESS
  end
  def params_for_success
    payment_response.dig(:payment_response)
  end
.....
class CommunicationError < StandardError
  def initialize(current_technical_message, response_code)
    @response = response
  end
end

但我会发现错误 parse_response': undefined method for nil:nilclass(nomethoderror)`

根据数字范围提出错误的正确方法是什么?这一行引起了问题:system_errors[:error_class].new(technical_message, response_code)

与JavaScript不同,Ruby不会在类型之间隐式转换。

(200..999).each do |current|
  system_errors[current.to_s] = CommunicationError
end
# now we have
system_errors["340"] == CommunicationError

所以稍后做

raise system_errors[340].new(technical_message, response_code)

它使用 Interger 340而不是 String "340"。缺少键返回nil,因此您正在调用nil.new。确定您是要使用整数还是字符串键,并在插入/读取时坚持下去。

最新更新