2010-03-02 24 views
1

看起來你不能在控制器中使用助手,即使它們都屬於同一個類。例如:XYZHelper和XYZController ...正確使用助手在軌道上的紅寶石

我的印象是,如果前綴是相同的「XYZ」,那麼輔助方法可以在控制器和視圖中使用,但我認爲這是不是這樣。

那麼,如何從控制器中刪除一些常用功能並將其放入幫助程序中。我想將這段代碼放在幫助器中,因爲其他控制器可能正在使用它。解決這個問題的最好方法是什麼?

謝謝, Jai。

回答

0

按照Pete的指導原則。如果仍然需要公開方法,請執行以下操作:

將方法添加到ApplicationController類中,並通過調用helper_method將方法註冊爲輔助方法。

class ApplicationController < ActionController::Base 

    helper_method :foo, :bar 

private 

    def foo 
    "foo" 
    end 

    def bar 
    "bar" 
    end 
end 
+0

如果我將方法作爲輔助方法添加,方法是否可用於項目中的任何助手?謝謝。 – iJK 2010-03-02 14:34:47

+0

是的,如果你添加到'ApplicationController',它會。 – 2010-03-02 17:19:39

1

有,你可以分享控制器之間的一些代碼的幾種方法:

  1. 應用控制器:如果有問題的代碼是一個動作/方法,應該是在一個控制器,但可以通過使用幾個控制器(或所有這些控制器),那麼這可能是一個放置它的地方。

  2. 'lib'目錄。只是一個通用的地方放置應該共享的代碼。

  3. 把它放在模型中。這可能適用,也可能不適用,但它值得仔細看看你正在嘗試移動的代碼,並考慮它是否對模型有意義(而不是控制器或lib中的隨機類/模塊) 。

+0

感謝您的回覆皮特。出於某種原因,將代碼放在應用程序控制器中似乎很髒我有一個與模型相關的方法,但同一個方法應該可以由控制器和應用程序助手中的方法調用。 – iJK 2010-03-02 02:57:05