我有一些红宝石代码:
def createCal(cal)
mod = @on + @off #line creating error.
@daycount = 0
cal
end
这会产生以下错误:/ calendar的NoMethodError未定义的方法`+'代表nil:NilClass文件:main.rb位置:createCal行:83
我在Sinatra中使用它,因此我可以将@on和@off打印到网页上,我可以确认它们实际上已经加载了值。我也在我的haml模板中做了一个'@ooo = @on + @off'并产生了7,这是预期的,因为on是4而且是3。
有什么想法吗?
更新:
以下是我处理@on和@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 :(得分:2)
您正在访问两个不同的实例变量:
@on
中的post
是Sinatra实例的实例变量。@on
中的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
答案 1 :(得分:1)
您的实例变量可能不在方法范围内。尝试以下方法来测试这个理论:
def createCal(cal, on, off, daycount)
mod = on + off #line creating error.
daycount = 0
cal
end
用(
)调用它(在您的/日历块中)createCal(cal, @on, @off, @daycount)