8

我的模型中有一个类方法,我需要从我的一个视图助手访问一个方法。目前我包括include TalkHelper,但我仍然得到一个 NoMethodError。

4

3 回答 3

42

在您的模型中,您可以执行以下操作:

ApplicationController.helpers.your_helper_method

或者

YourController.helpers.your_helper_method

最好的解决方案是重构您的代码,以便您根本不需要从模型中调用视图帮助程序代码。这不是 RoR 方式。正如其他人指出的那样,您可以将帮助代码提取到 lib 文件夹。

有关更多信息,请参见:

http://railscasts.com/episodes/132-helpers-outside-views

于 2011-09-19T00:29:51.077 回答
9

您可以将助手放在您的 lib 文件夹中并将它们包含在任何地方。像这样:lib/some_helper.rb

module SomeHelper
  def somedef
    #your code there
  end
end
于 2011-09-18T23:40:01.133 回答
6

如果您需要类方法中的帮助器,则需要extend它,而不是include它。

module TalkHelper
  def woo; 'hoo' end
end   

class MyClass
  extend TalkHelper

  def self.boo; woo end
end

MyClass.boo #=> 'hoo'

请注意视图上下文之外的助手,因为助手可能依赖于controller,或者来自请求上下文的其他内容,这些内容在您的模型中不可用。

于 2011-09-19T00:05:48.853 回答