看起来你不能在控制器中使用助手,即使它们都属于同一个类。例如:XYZHelper和XYZController ...正确使用助手在轨道上的红宝石
我的印象是,如果前缀是相同的“XYZ”,那么辅助方法可以在控制器和视图中使用,但我认为这是不是这样。
那么,如何从控制器中删除一些常用功能并将其放入帮助程序中。我想将这段代码放在帮助器中,因为其他控制器可能正在使用它。解决这个问题的最好方法是什么?
谢谢, Jai。
看起来你不能在控制器中使用助手,即使它们都属于同一个类。例如:XYZHelper和XYZController ...正确使用助手在轨道上的红宝石
我的印象是,如果前缀是相同的“XYZ”,那么辅助方法可以在控制器和视图中使用,但我认为这是不是这样。
那么,如何从控制器中删除一些常用功能并将其放入帮助程序中。我想将这段代码放在帮助器中,因为其他控制器可能正在使用它。解决这个问题的最好方法是什么?
谢谢, Jai。
按照Pete
的指导原则。如果仍然需要公开方法,请执行以下操作:
将方法添加到ApplicationController
类中,并通过调用helper_method
将方法注册为辅助方法。
class ApplicationController < ActionController::Base
helper_method :foo, :bar
private
def foo
"foo"
end
def bar
"bar"
end
end
有,你可以分享控制器之间的一些代码的几种方法:
应用控制器:如果有问题的代码是一个动作/方法,应该是在一个控制器,但可以通过使用几个控制器(或所有这些控制器),那么这可能是一个放置它的地方。
'lib'目录。只是一个通用的地方放置应该共享的代码。
把它放在模型中。这可能适用,也可能不适用,但它值得仔细看看你正在尝试移动的代码,并考虑它是否对模型有意义(而不是控制器或lib中的随机类/模块) 。
感谢您的回复皮特。出于某种原因,将代码放在应用程序控制器中似乎很脏我有一个与模型相关的方法,但同一个方法应该可以由控制器和应用程序助手中的方法调用。 – iJK 2010-03-02 02:57:05
如果我将方法作为辅助方法添加,方法是否可用于项目中的任何助手?谢谢。 – iJK 2010-03-02 14:34:47
是的,如果你添加到'ApplicationController',它会。 – 2010-03-02 17:19:39