看起來你不能在控制器中使用助手,即使它們都屬於同一個類。例如:XYZHelper和XYZController ...正確使用助手在軌道上的紅寶石
我的印象是,如果前綴是相同的「XYZ」,那麼輔助方法可以在控制器和視圖中使用,但我認爲這是不是這樣。
那麼,如何從控制器中刪除一些常用功能並將其放入幫助程序中。我想將這段代碼放在幫助器中,因爲其他控制器可能正在使用它。解決這個問題的最好方法是什麼?
謝謝, Jai。
看起來你不能在控制器中使用助手,即使它們都屬於同一個類。例如:XYZHelper和XYZController ...正確使用助手在軌道上的紅寶石
我的印象是,如果前綴是相同的「XYZ」,那麼輔助方法可以在控制器和視圖中使用,但我認爲這是不是這樣。
那麼,如何從控制器中刪除一些常用功能並將其放入幫助程序中。我想將這段代碼放在幫助器中,因爲其他控制器可能正在使用它。解決這個問題的最好方法是什麼?
謝謝, Jai。
按照Pete
的指導原則。如果仍然需要公開方法,請執行以下操作:
將方法添加到ApplicationController
類中,並通過調用helper_method
將方法註冊爲輔助方法。
class ApplicationController < ActionController::Base
helper_method :foo, :bar
private
def foo
"foo"
end
def bar
"bar"
end
end
有,你可以分享控制器之間的一些代碼的幾種方法:
應用控制器:如果有問題的代碼是一個動作/方法,應該是在一個控制器,但可以通過使用幾個控制器(或所有這些控制器),那麼這可能是一個放置它的地方。
'lib'目錄。只是一個通用的地方放置應該共享的代碼。
把它放在模型中。這可能適用,也可能不適用,但它值得仔細看看你正在嘗試移動的代碼,並考慮它是否對模型有意義(而不是控制器或lib中的隨機類/模塊) 。
感謝您的回覆皮特。出於某種原因,將代碼放在應用程序控制器中似乎很髒我有一個與模型相關的方法,但同一個方法應該可以由控制器和應用程序助手中的方法調用。 – iJK 2010-03-02 02:57:05
如果我將方法作爲輔助方法添加,方法是否可用於項目中的任何助手?謝謝。 – iJK 2010-03-02 14:34:47
是的,如果你添加到'ApplicationController',它會。 – 2010-03-02 17:19:39