Rails 3中Model中的View助手方法

8

我的模型中有一个类方法,我需要从其中一个视图辅助程序中访问一个方法。目前我正在包含包括TalkHelper,但是我仍然会收到NoMethodError。

3个回答

42

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

ApplicationController.helpers.your_helper_method

或者

YourController.helpers.your_helper_method

最佳解决方案是重构你的代码,使得你不需要从模型中调用视图助手代码。这不是RoR的做法。正如其他人所指出的那样,你可以将辅助代码提取到lib文件夹中。

查看此链接获取更多信息:

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


最终我采纳了你的建议,重构了我的代码,这样我就不必在模型中使用辅助方法了。 - LanguagesNamedAfterCofee

8
您可以将Helper放置在lib文件夹中并随处包含使用,如下所示: lib/some_helper.rb
module SomeHelper
  def somedef
    #your code there
  end
end

应该是 module 吗? - Tyler DeWitt

6
如果您需要在类方法中使用该助手,您需要使用extend而不是include
module TalkHelper
  def woo; 'hoo' end
end   

class MyClass
  extend TalkHelper

  def self.boo; woo end
end

MyClass.boo #=> 'hoo'

在视图上下文之外使用帮助程序时要小心,因为帮助程序可能依赖于控制器或请求上下文中的其他内容,在您的模型中将无法使用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接