任何人都可以通过正确的方式指导我将现有的Helper添加到扩展控制器中,以前不包含此帮助程序。
例如,我在 timelog_controller_patch.rb 中扩展了 timelog_controller.rb 控制器。然后,我尝试添加帮助器查询,这带来了我想要在我的补丁中使用的一些功能。
如果我在我的补丁(我的时间日志扩展控件)中添加帮助器,我总会得到同样的错误:
错误:未初始化的常量Rails :: Plugin :: TimelogControllerPatch(NameError)
以下是我如何做的一个例子:
module TimelogControllerPatch
def self.included(base)
base.send(:include, InstanceMethods)
base.class_eval do
alias_method_chain :index, :filters
end
end
module InstanceMethods
# Here, I include helper like this (I've noticed how the other controllers do it)
helper :queries
include QueriesHelper
def index_with_filters
# ...
# do stuff
# ...
end
end # module
end # module patch
但是,当我在原始控制器中包含相同的帮助程序时,一切正常(当然,这不是正确的方法)。
有人能告诉我我做错了什么吗?
提前致谢:)
答案 0 :(得分:4)
需要在控制器的类上调用helper
方法,方法是将它放入模块中,使其无法正常运行。这将有效:
module TimelogControllerPatch
def self.included(base)
base.send(:include, InstanceMethods)
base.class_eval do
alias_method_chain :index, :filters
#
# Anything you type in here is just like typing directly in the core
# source files and will be run when the controller class is loaded.
#
helper :queries
include QueriesHelper
end
end
module InstanceMethods
def index_with_filters
# ...
# do stuff
# ...
end
end # module
end # module patch
随意查看我在Github上的任何插件,我的大多数补丁都在lib/plugin_name/patches
。我知道我在那里添加了一个助手,但我现在找不到它。 https://github.com/edavis10
P.S。不要忘记也需要你的补丁。如果它不在插件的lib
目录中,请使用相对路径。
Eric Davis
答案 1 :(得分:0)
或者,如果您不想使用补丁:
Rails.configuration.to_prepare do
TimelogController.send(:helper, :queries)
end