2011-09-06 71 views
2

我有一個比特的代碼紅寶石:NoMethodError在Ruby

def createCal(cal) 
    mod = @on + @off #line creating error. 
    @daycount = 0  
    cal 
    end 

這會產生以下錯誤:NoMethodError在用於零/日曆未定義的方法'+」:NilClass文件:main.rb的位置:createCal行: 83

我在Sinatra中使用了這個功能,所以我可以將@on和@off打印到網頁上,我可以確認它們實際上正在裝入值。我也在我的haml模板中做了一個'@ooo = @on + @off',並且產生了7,這是可以預期的,因爲它是4並且不是3。

UPDATE:

這裏是我如何處理@o​​n和@off

post '/calendar' do 
    @on = params["on"] 
    @off = params["off"] 
    @date = params["date"] 
    a = Doer.new 
    @var = a.makeDate(@date) 
    @on = @on.to_i 
    @off = @off.to_i 
    @ooo = @on + @off 
    @cal = a.makeCal(@var) 
    haml :feeling 
end 
+0

這讓我想起[我提出的問題前一段時間]的(http://stackoverflow.com/questions/6970645/object-with-bigdecimals-returns-empty-strings-on-到-S)。我想知道爲什麼我無法在Rails中獲得我的屬性。現在我對Sinatra瞭解不多,但是'on'和'off'應該使用'on'和'off'方法來調用,而不是'@ on'和'@ off'?因爲它看起來像你的變量/屬性不被正確的說,當他們說,他們返回'無'... –

+2

Upvoted反對投票,我不認爲是合理的,因爲這是一個完全有效的問題。 – Gazler

+0

我不認爲他們應該是方法。它們只是我從表單拉入的變量。 –

回答

2

你訪問兩個不同的實例變量:

  • @on in post是您的Sinatra實例的一個實例變量。
  • in createCal是您的Doer實例中的一個實例變量。

要使用@on@off像你想,你需要將它們轉換爲傳遞給createCal方法的參數。事情是這樣的:

class Doer 
    def createCal(cal, on, off) 
    mod = on + off 
    # more code... 
    cal 
    end 
end 

post '/calendar' do 
    a = Doer.new 
    date = a.makeDate params['date'] 
    @cal = a.makeCal date, params['on'], params['off'] 

    haml :some_template 
end 
+0

mod創建我稍後使用的模數值。 –

+0

是的,我現在看到了。用一些更好的典故更新我的例子,以揮手繼續。 – harbichidian

+0

謝謝。這工作,我實際上清理我的/日曆,以便在我的makeCal方法中調用makeDate方法。我不知道這是好還是壞。 –

1

你的實例變量可能不是在方法的範圍。請嘗試以下方法驗證這一理論:與

def createCal(cal, on, off, daycount) 
    mod = on + off #line creating error. 
    daycount = 0  
    cal 
end 

,並調用它(在/日曆塊):

createCal(cal, @on, @off, @daycount) 
+0

我早就試過了。但是,我再次嘗試了一下,以確保我沒有錯過任何東西。同樣的事情錯誤,linenumber,等等再次發生。 –

+1

你可以將所有相關的代碼發佈到github /在gist/pastie上,並提供一個你正在測試的樣本URL,我將檢查它。 – Gazler

+0

https://gist.github.com/1198881是代碼。我只是在本地做這個。 –