2016-03-08 50 views
-1

我在標記的行上得到錯誤undefined method '[]' for nil:NilClass。記錄器顯示hash不是零。看來我不會將這種方法稱作該行中的其他方法。我在這裏錯過了什麼?Ruby變量似乎爲零,但不是零

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 

這是記錄器的輸出:

Attr init asdasd: {:name=>"join_id.alma", :type=>"", :default_value=>"", :original_name=>nil}, nil?: false 
+1

你能展現'hash'的價值? – HashRocket

+0

我添加了記錄器輸出的行。 – laci37

+0

你可以打印哈希class.name只是爲了確保這是一個散列,而不是其他任何具有相同或相似格式的東西? – tbem

回答

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 
+0

這幾乎是正確的。我使用Mongoid作爲對象映射器,但同樣適用。 – laci37