我在ApplicationController中编写了一个小帮助方法,如下所示:
helper_method :dehumanize
def dehumanize (string)
string.parameterize.underscore
end
现在我想在我的一个模型文件中使用它,但它似乎不可用。
我也尝试过:
ApplicationController.dehumanize(title)
在模型中,但它不起作用。
如何让它在那里工作的任何线索?
谢谢,
答案 0 :(得分:4)
模型通常不能/不应该访问控制器中的方法(MVC约定),但是您编写的方法并不一定属于控制器无论如何 - 作为字符串类的扩展会更好。
我建议您编写初始化程序,将dehumanize
添加到String
:
\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
答案 1 :(得分:0)
Matt
的回答是完全正确的,但为了给您一些澄清,您需要确保在objects
/ {{1}上调用您的方法},而不是自己的课程
例如,你提到你试过这个:
instances
这将永远不会起作用,因为它在一个未初始化的类上调用方法,更不用说该类没有该方法。基本上,如果你调用这种方法,你会期待什么?
这样做的方法是使用推荐的方法ApplicationController.dehumanize(title)
,或者在模型本身上使用类方法,这样您就可以直接调用模型的方法:
Matt