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

问题描述 投票:0回答:3

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

ruby-on-rails ruby
3个回答
2
投票

如果你真的不想使用after_initialize,请动态创建变量:

attr_writer :test

def testing
  self.test += 1
end

def test
  @test ||= 0
end    

2
投票

所以after_initialize似乎真的是最好的解决方案。

class Test < ActiveRecord::Base

  after_initialize do
    @test = 1
  end

  def testing
    @test+=1
  end
end

1
投票

您在代码中定义的是@test类实例变量,您可能只需要一个实例变量。使用after_initialize在这里有点矫枉过正,你可以这样做:

  def test
    @test ||= 1
  end
© www.soinside.com 2019 - 2024. All rights reserved.