Ruby变量似乎是零,但不是零

lac*_*i37 -1 ruby ruby-on-rails

undefined method '[]' for nil:NilClass在标记的行处得到错误.记录器显示hash不是零.我似乎并没有在该行的其他任何地方调用此方法.我在这里错过了什么?

def initialize(hash)
    Rails.logger.debug "Attr init hash: #{hash.inspect}, nil?: #{hash.nil?}"
    self.name = hash[:name] #error here
    self.type = hash[:type]
    self.default_value = hash[:default_value]
    self.original_name = if hash[:original_name]
                           hash[:original_name]
                         else
                           name
                         end
  end
Run Code Online (Sandbox Code Playgroud)

这是记录器的输出:

Attr init asdasd: {:name=>"join_id.alma", :type=>"", :default_value=>"", :original_name=>nil}, nil?: false
Run Code Online (Sandbox Code Playgroud)

spi*_*ann 5

您覆盖initialize,因此您的ActiveRecord对象未正确初始化.引发错误是因为self.name内部尝试更新实例的attributes哈希并失败.

当您覆盖该initialize方法时,首先调用super以运行默认initialize方法是有意义的:

def initialize(hash)
  super(hash.slice(:name, :type, :default_value))
  self.original_name = hash[original_name] || name
end
Run Code Online (Sandbox Code Playgroud)