2013-03-09 152 views
0

這是我的課:未定義的方法「+」:NilClass

class Combatant < ActiveRecord::Base 
    attr_accessible :resource_current 

    def change_resource(amount) 
    resource_current += amount 
    if resource_current < 0 
     resource_current = 0 
    elsif resource_current > 100 
     resource_current = 100 
    end 
    end 
end 

當戰鬥類的對象上執行change_resource我越來越:

undefined method `+' for nil:NilClass 

當然resource_current已初始化並具有值6.

當我將方法更改爲:

def change_resource(amount) 
    self.resource_current += amount 
    if resource_current > 100 
     resource_current = 100 
    elsif resource_current < 0 
     resource_current = 0 
    end 
    end 

有云:

undefined method `<' for nil:NilClass 

所以我再添 '自我':

def change_resource(amount) 
    self.resource_current += amount 
    if resource_current > 100 
     resource_current = 100 
    elsif self.resource_current < 0 
     resource_current = 0 
    end 
    end 

的方法現在的工作。 爲什麼?爲什麼我不需要第一個條件的另一個「自我」(如果resource_current> 100)? 爲什麼我需要'自我'?

+0

因爲沒有它,你可能會聲明一個本地'resource_current'而不是從數據庫模式訪問由Rails生成的方法。 – 2013-03-09 20:01:33

+0

好吧,我想代碼'resource_current + = amount'的第一行可以被解釋爲局部變量的聲明。但爲什麼我需要在第二種情況下使用'self'?爲什麼我不需要第一個條件? – balush 2013-03-10 10:00:22

+0

logn故事簡介:它終於爲我工作,沒有奇怪的語法和無法解釋的錯誤 - 只能解釋我能想出的是我在測試過程中搞砸了一些東西 – balush 2013-05-12 11:33:48

回答

0

正如我已經寫在上面的評論: 它終於爲我工作,沒有奇怪的語法和不明原因的錯誤 - 只能解釋我能想出的是,我在測試過程中搞砸了一些東西。

相關問題