在我的Rails 3應用程序,我有一個包含我自己的助手一個模塊,覆蓋了幾個建在軌助手:僅加載傭工
module MyHelpers
def form_for(*args)
...
end
def link_to(*args)
...
end
end
上述模塊住在lib文件夾中。
我希望這些助手只能用於特定的控制器操作。我在這第一個嘗試是這樣的:
require "my_helpers"
class MyController < ApplicationController
before_filter :add_helpers
def add_helpers
if some_condition
ApplicationHelper.send(:include, MyHelpers)
end
end
..
end
Module.send(:包括ModuleB)是包含另一個模塊中的一個模塊的有效方式,但它不會做什麼,我需要在這種情況下, :我的模塊中的方法在視圖中不可用。看起來好像Rails已經在任何控制器方法運行之前確定了哪些輔助方法可用於視圖。
有沒有辦法做我需要的?
我知道我可以全局重寫form_for方法,但我寧願不這樣做。
我認爲這個問題的答案來自於理解軌道如何使視圖可以訪問輔助方法。
爲什麼不乾脆重新命名方法呢?他們顯然做了別的事情,然後'form_for'和'link_to'在做。 – 2013-04-05 09:56:45
因爲我正在開發的庫正在做一些應該在任何rails應用程序中與任何控制器一起工作的東西。控制器本身不應該知道發生了什麼。 – cmrichards 2013-04-05 10:10:56
我強烈建議不要覆蓋原生Rails的幫助器方法。當'link_to'不工作時,會引發一些新的代碼,就像Rails所說的那樣。正如本傑明所說,我建議重新命名這些方法,並在必要時更新您的視圖。 – osahyoun 2013-04-05 10:26:32