在我的 Rails 3 应用程序中,我有一个包含我自己的助手的模块,它覆盖了几个内置的 rails 助手:
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(:include, ModuleB) 是在另一个模块中包含模块的有效方法,但在这种情况下它不能满足我的需要:我的模块中的方法在视图中不可用。在运行任何控制器方法之前,Rails 似乎已经确定了视图可以使用哪些辅助方法。
有没有办法做我需要的?
我知道我可以全局覆盖 form_for 方法,但我不想这样做。
我认为这个问题的答案将来自于理解 rails 如何使视图可以访问辅助方法。