Ruby 红宝石中的命名者
我有一些ruby代码:Ruby 红宝石中的命名者,ruby,sinatra,nomethoderror,Ruby,Sinatra,Nomethoderror,我有一些ruby代码: def createCal(cal) mod = @on + @off #line creating error. @daycount = 0 cal end 这将生成以下错误:nil:NilClass文件:main.rb位置:createCal行:83 我在Sinatra中使用它,所以我可以在网页上打印@on和@off,我可以确认它们实际上加载了值。我还在haml模板中做了一个'@ooo=@on+@off',结果是7,这是意料
def createCal(cal)
mod = @on + @off #line creating error.
@daycount = 0
cal
end
这将生成以下错误:nil:NilClass文件:main.rb位置:createCal行:83
我在Sinatra中使用它,所以我可以在网页上打印@on和@off,我可以确认它们实际上加载了值。我还在haml模板中做了一个'@ooo=@on+@off',结果是7,这是意料之中的,因为on是4,off是3
有什么想法吗
更新:
以下是我如何处理“开”和“关”
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
您的实例变量可能不在该方法的范围内。尝试以下方法来检验这一理论:
def createCal(cal, on, off, daycount)
mod = on + off #line creating error.
daycount = 0
cal
end
并使用以下命令调用它(在/日历块中):
您正在访问两个不同的实例变量:
中的post
是Sinatra实例的实例变量
中的createCal
是来自Doer实例的实例变量@on
@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
它使我想起了我的朋友。我想知道为什么我不能在Rails中获取属性。现在我对Sinatra不太了解,但是
on
和off
应该使用on
和off
而不是
和
的方法调用吗?因为当你的变量/属性返回nil
时,看起来你的变量/属性没有得到正确的处理。我不认为这是一个完全正确的问题。我认为它们不应该是方法。它们只是我从表单中提取的变量。我之前就试过这么做。然而,我又试了一次,只是为了确保我没有遗漏什么。同样的错误、行号等再次出现。你能在github/上发布所有相关代码,并在gist/pastie中提供一个你正在测试的示例url,我会检查它。对不起,我是说什么url在本地,如/calendar?on=5&off=200等/calendar?on=3&off=4&date=9/12/2011之类。检查完gist后,这绝对是一个范围问题。看看哪个有效。看看我对你的post/calendar块做了什么。mod创建了我稍后使用的模数值。是的,我现在看到了。更新了我的例子,更好地暗示了挥手的过程。谢谢。这起作用了,我实际上清理了我的/calendar,以便在我的makeCal方法中调用makeDate方法。我不知道这是好是坏。那好多了。用你的代码从别人的角度考虑一下:我只需要一个从X到Y的日历,告诉我如何给你发送这些日期,我不在乎它在里面是如何工作的。
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