Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 模型中的Rails 3视图辅助对象方法_Ruby On Rails_Ruby On Rails 3_View Helpers - Fatal编程技术网

Ruby on rails 模型中的Rails 3视图辅助对象方法

Ruby on rails 模型中的Rails 3视图辅助对象方法,ruby-on-rails,ruby-on-rails-3,view-helpers,Ruby On Rails,Ruby On Rails 3,View Helpers,我的模型中有一个类方法,我需要从我的一个视图助手访问一个方法。目前我正在包括include TalkHelper,但我仍然得到一个NoMethodError。您可以将helper放在lib文件夹中,并将其包括在任何位置。 这样地: lib/some_helper.rb module SomeHelper def somedef #your code there end end 如果在类方法中需要助手,则需要扩展它,而不是包含它 module TalkHelper def w

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

您可以将helper放在lib文件夹中,并将其包括在任何位置。 这样地: lib/some_helper.rb

module SomeHelper
  def somedef
    #your code there
  end
end

如果在类方法中需要助手,则需要
扩展它,而不是
包含它

module TalkHelper
  def woo; 'hoo' end
end   

class MyClass
  extend TalkHelper

  def self.boo; woo end
end

MyClass.boo #=> 'hoo'

只需小心查看上下文之外的帮助程序,因为帮助程序可能依赖于请求上下文中的
controller
,或其他内容,而这些内容在您的模型中不可用。

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

ApplicationController.helpers.your_helper_method

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

有关更多信息,请参见此:


我最终按照您的建议修改了代码,这样我就不必在模型中使用helper方法了。应该是
模块
(小写)?