我的模型中有一个类方法,我需要从我的一个视图助手访问一个方法。目前我包括include TalkHelper
,但我仍然得到NoMethodError。
答案 0 :(得分:41)
在您的模型中,您可以执行以下操作:
ApplicationController.helpers.your_helper_method
或
YourController.helpers.your_helper_method
最佳解决方案是重构您的代码,这样您就不需要从模型中调用视图帮助程序代码。这不是RoR的方式。正如其他人指出的那样,您可以将帮助程序代码解压缩到lib文件夹。
有关详细信息,请参阅此处:
答案 1 :(得分:9)
您可以在lib文件夹中放置帮助程序并将其包含在其中。 像这样: LIB / some_helper.rb
module SomeHelper
def somedef
#your code there
end
end
答案 2 :(得分:6)
如果您需要在类方法中使用帮助器,则需要extend
,而不是include
。
module TalkHelper
def woo; 'hoo' end
end
class MyClass
extend TalkHelper
def self.boo; woo end
end
MyClass.boo #=> 'hoo'
请注意视图上下文之外的帮助程序,因为帮助程序可能依赖于controller
或请求上下文中的其他内容,而这些内容在您的模型中不可用。