我对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中也是合法的吗?什么是典型的铁路方式呢?
感谢您的任何建议......!
答案 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