访问模型中的自定义帮助程序

时间:2014-05-13 08:54:55

标签: ruby-on-rails ruby ruby-on-rails-3 model-view-controller

我在ApplicationController中编写了一个小帮助方法,如下所示:

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

现在我想在我的一个模型文件中使用它,但它似乎不可用。

我也尝试过:

ApplicationController.dehumanize(title)

在模型中,但它不起作用。

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

谢谢,

2 个答案:

答案 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