在rails控制器中使用静态变量是一种好习惯吗?

时间:2017-09-15 21:52:12

标签: ruby-on-rails static-variables

我对rails中的最佳做法有疑问。 在我的rails项目中,我有以下代码:

class MyController < ApplicationController

  def some_method
    @product = MyFabricatorClass.new.create_product
  end

  ...
end

MyFabricatorClass不依赖某些状态,其行为是不变的。我也在做很多C ++的东西,对我来说,总是实例化一个新的MyFabricatorClass对象感觉有点无效。在C ++项目中,我可以使用类似的东西:

class MyController < ApplicationController

  @@my_fabricator = nil

  def some_method
    @@my_fabricator ||= MyFabricatorClass.new
    @product = @@my_fabricator.create_product
  end

  ...
end

这种风格在Rails中也是合法的吗?什么是典型的铁路方式呢?

感谢您的任何建议......!

1 个答案:

答案 0 :(得分:5)

更好的做法是不在ruby中使用类变量(以@@开头的那些变量); see here why

这可能看起来像一个奇怪的代码,但这是更传统的方式:

你设置了一个&#34;类&#34;实例变量,而不是设置&#34;类变量&#34;。

class MyController < ApplicationController
  @my_fabricator = nil

  class << self
    def some_method
      @my_fabricator ||= MyFabricatorClass.new
      @product = @my_fabricator.create_product
    end
  end
end

关于class << self,请参阅here

以上代码与:

相同
class MyController < ApplicationController
  @my_fabricator = nil

  def self.some_method
    @my_fabricator ||= MyFabricatorClass.new
    @product = @my_fabricator.create_product
  end
end

现在你可以这样做:

MyController.some_method