我正在使用旧插件“menu_helper”(遗留代码使用它)。
https://github.com/pluginaweek/menu_helper
该图书馆的正门如下,
module PluginAWeek
module MenuHelper
def menu_bar(options = {}, html_options = {}, &block)
puts @controller.class
MenuBar.new(@controller, options, html_options, &block).html
end
end
end
ActionController::Base.class_eval do
helper PluginAWeek::MenuHelper
end
代码在rails 2.3.5中运行没有问题但在4.2.6中失败。
当我将@ controller.class放在2.3.5中时,它将始终返回使用此库的当前控制器,但在4.2.6中它将是NillClass。
那么@controller来自哪里?如何在4.2.6中进行修改以使其正常工作。
注1:要使用它,我只需要调用
html = menu_bar(options,:id => 'menuid')
没有传入任何控制器。
注2:我目前正在控制器测试中运行它。
感谢。
答案 0 :(得分:1)
首先,我不会使用过去5年内未维护的gem,并且主构建当前失败。我试图找到一个维护良好的替代方案,或者如果宝石足够小,可以自己重做。
话虽如此,menu_helper
似乎使用了这个变量:https://github.com/pluginaweek/menu_helper/blob/master/lib/menu_helper/menu.rb#L51
如果你想让它工作,做一个before_action
,用当前的控制器实例化这个变量:
before_action :set_legacy_controller
def set_legacy_controller
@controller = controller
end