在Rails中初始化实例变量的最佳方法

时间:2014-11-19 14:12:01

标签: ruby-on-rails ruby

我在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?:

3 个答案:

答案 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