2010-03-02 59 views
1

看起来你不能在控制器中使用助手,即使它们都属于同一个类。例如:XYZHelper和XYZController ...正确使用助手在轨道上的红宝石

我的印象是,如果前缀是相同的“XYZ”,那么辅助方法可以在控制器和视图中使用,但我认为这是不是这样。

那么,如何从控制器中删除一些常用功能并将其放入帮助程序中。我想将这段代码放在帮助器中,因为其他控制器可能正在使用它。解决这个问题的最好方法是什么?

谢谢, Jai。

回答

0

按照Pete的指导原则。如果仍然需要公开方法,请执行以下操作:

将方法添加到ApplicationController类中,并通过调用helper_method将方法注册为辅助方法。

class ApplicationController < ActionController::Base 

    helper_method :foo, :bar 

private 

    def foo 
    "foo" 
    end 

    def bar 
    "bar" 
    end 
end 
+0

如果我将方法作为辅助方法添加,方法是否可用于项目中的任何助手?谢谢。 – iJK 2010-03-02 14:34:47

+0

是的,如果你添加到'ApplicationController',它会。 – 2010-03-02 17:19:39

1

有,你可以分享控制器之间的一些代码的几种方法:

  1. 应用控制器:如果有问题的代码是一个动作/方法,应该是在一个控制器,但可以通过使用几个控制器(或所有这些控制器),那么这可能是一个放置它的地方。

  2. 'lib'目录。只是一个通用的地方放置应该共享的代码。

  3. 把它放在模型中。这可能适用,也可能不适用,但它值得仔细看看你正在尝试移动的代码,并考虑它是否对模型有意义(而不是控制器或lib中的随机类/模块) 。

+0

感谢您的回复皮特。出于某种原因,将代码放在应用程序控制器中似乎很脏我有一个与模型相关的方法,但同一个方法应该可以由控制器和应用程序助手中的方法调用。 – iJK 2010-03-02 02:57:05