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方法了。应该是模块
(小写)?