2017-09-15 106 views
1

我有一個關於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

爲什麼不把'create_product' 「MyFabricatorClass」上的類方法? – jvillian

+0

@jvillian:感謝您的評論。對不起,我選擇了錯誤的命名。 MyFabricatorClass不是重新召集我的班級,但第三方。所以,更改MyFabricatorClass不是一個選項。 – schmitze333

回答

3

在ruby中不使用類變量(以@@開頭的變量)是一種更好的做法; see here why

這可能看起來像一個奇怪的代碼,但是這是比較傳統的方式:

您可以設置一個「類」的實例變量,而不是設置一個「類變量」。

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 
+0

感謝您澄清和額外的資源。接受和upvoted。 – schmitze333

相關問題