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

sch*_*333 2 ruby-on-rails static-variables

我有一个关于Rails最佳实践的问题。在我的rails项目中,我有以下代码:

class MyController < ApplicationController

  def some_method
    @product = MyFabricatorClass.new.create_product
  end

  ...
end
Run Code Online (Sandbox Code Playgroud)

MyFabricatorClass不依赖于某些状态,并且其行为是恒定的。我也在做很多C ++的工作,对我来说,总是实例化一个新的MyFabricatorClass对象似乎有点效率低下。在C ++项目中,我会适当地使用类似以下内容的东西:

class MyController < ApplicationController

  @@my_fabricator = nil

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

  ...
end
Run Code Online (Sandbox Code Playgroud)

这种样式在Rails中也合法吗?典型的Rails方式是什么?

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

Jay*_*rio 5

最好不要@@在ruby中使用类变量(以开头的变量)。看看为什么

这看起来像是一个奇怪的代码,但这是更常规的方式:

您设置一个“类”实例变量,而不是设置一个“类变量”。

class MyController < ApplicationController
  @my_fabricator = nil

  class << self
    def some_method
      @my_fabricator ||= MyFabricatorClass.new
      @product = @my_fabricator.create_product
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

关于class << self,请参阅此处

上面的代码与以下代码相同:

class MyController < ApplicationController
  @my_fabricator = nil

  def self.some_method
    @my_fabricator ||= MyFabricatorClass.new
    @product = @my_fabricator.create_product
  end
end
Run Code Online (Sandbox Code Playgroud)

现在您可以执行以下操作:

MyController.some_method
Run Code Online (Sandbox Code Playgroud)