2014-05-13 160 views
0

我写了一个小帮手方法在我的ApplicationController是这样的:访问自定义帮助

helper_method :dehumanize 
def dehumanize (string) 
    string.parameterize.underscore 
end 

现在,我想在我的模型文件一个使用它,但它似乎没有可用那里。

我也试图与:

ApplicationController.dehumanize(title) 
模型

,但它不工作。

如何使它在那里工作的任何线索?

感谢,

回答

4

模型一般不能/不/不应该访问控制器方法(MVC惯例),但你写不控制器必然属于反正方法 - 它将会更好地作为字符串类的扩展。

我建议你写一个初始化加dehumanizeString

\config\initializers\string_dehumanize.rb 

class String 
    def dehumanize 
    self.parameterize.underscore 
    end 
end 

您将需要重新启动服务器/控制台,但那么你就可以在任何字符串调用.dehumanize

some model: 
def some_method 
    string1 = 'testing_the_method' 
    string1.dehumanize 
end 
+0

+1想出来的盒子 –

0

Matt的答案是完全正确的,但为了给你一些澄清,你想确保你打电话给你的方法objects/instances,而不是cla的SSE自己

例如,你提到你尝试过这样的:

ApplicationController.dehumanize(title) 

这不会有任何效果,因为它调用上未初始化的类中的方法,更何况类没有这个方法。基本上,如果你称这种方法,你会期望什么?

做到这一点的方法是使用的方法Matt推荐,或使用你的模型本身就是一个类的方法,这将允许您调用模型的直接方法:

#app/models/model.rb 
class Model < ActiveRecord::Base 
    def self.dehumanize string 
     string.parameterize.underscore 
    end 
end 

# -> Model.dehumanize title