在我的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