我在Rails中初始化实例变量时遇到问题,需要在不同的方法中使用变量,但这需要事先初始化,例如:
class Test < ActiveRecord::Base
@test = 1
def testing
@test+1
end
end
t = Test.new
t.testing
我收到以下错误:
test.rb:4:in `testar': undefined method `+' for nil:NilClass (NoMethodError)
from test.rb:9:in `<main>'
有没有更优雅的方法来初始化变量而不使用after_initialize
?:
答案 0 :(得分:2)
如果你真的不想使用after_initialize
,请动态创建变量:
attr_writer :test
def testing
self.test += 1
end
def test
@test ||= 0
end
答案 1 :(得分:2)
所以after_initialize
似乎是最好的解决方案。
class Test < ActiveRecord::Base
after_initialize do
@test = 1
end
def testing
@test+=1
end
end
答案 2 :(得分:1)
您在代码中定义的是@test
类实例变量,您可能只想要一个实例变量。
使用after_initialize
在这里过度,你可以做类似的事情:
def test
@test ||= 1
end