看起来你不能在控制器中使用帮助器,即使它们都属于同一个类。例如:XYZHelper和XYZController ...
我的印象是,如果前缀是相同的“XYZ”,那么帮助器中的方法可以在控制器和视图中使用,但我认为情况并非如此。
那么如何从控制器中删除一些常用功能并将其放在帮助器中。我想将这段代码放在帮助器中,因为其他控制器可能正在使用它。解决这个问题的最佳方式是什么。
谢谢, 洁。
答案 0 :(得分:1)
有几种方法可以在控制器之间共享一些代码:
应用程序控制器:如果有问题的代码是一个应该在控制器中的操作/方法,但是可以由多个控制器(或所有控制器)使用,那么这可能是一个放置它的地方
'lib'目录。只是一个通用的地方放置应该共享的代码。
将它放入模型中。这可能适用也可能不适用,但是值得仔细研究一下您试图移动的代码,并考虑它是否对模型有意义(而不是lib中的控制器或随机类/模块) 。
答案 1 :(得分:0)
遵循Pete
的指导原则。如果您仍需要公开方法,请执行以下操作:
将方法添加到ApplicationController
类,并通过调用helper_method
将方法注册为帮助方法。
class ApplicationController < ActionController::Base
helper_method :foo, :bar
private
def foo
"foo"
end
def bar
"bar"
end
end