Rails 3在Model中查看辅助方法

Lan*_*fee 8 ruby-on-rails view-helpers ruby-on-rails-3

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

Inn*_*cer 41

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

ApplicationController.helpers.your_helper_method
Run Code Online (Sandbox Code Playgroud)

要么

YourController.helpers.your_helper_method
Run Code Online (Sandbox Code Playgroud)

最好的解决办法就是重构你的代码,这样你就不需要从模型的所有调用视图助手代码.这不是RoR的方式.正如其他人指出的那样,您可以将帮助程序代码解压缩到lib文件夹.

有关详细信息,请参阅此

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


rai*_*ard 9

您可以在lib文件夹中放置帮助程序并将其包含在其中.像这样:lib/some_helper.rb

module SomeHelper
  def somedef
    #your code there
  end
end
Run Code Online (Sandbox Code Playgroud)


num*_*407 6

如果你需要一个类方法中的帮助器,你需要extend它,而不是include它.

module TalkHelper
  def woo; 'hoo' end
end   

class MyClass
  extend TalkHelper

  def self.boo; woo end
end

MyClass.boo #=> 'hoo'
Run Code Online (Sandbox Code Playgroud)

请注意视图上下文之外的帮助程序,因为帮助程序可能依赖于controller请求上下文中的其他内容,或者您的模型中不可用的其他内容.