在模型中使用助手:我如何包含助手依赖?

我正在写一个模型来处理来自文本区域的用户input。 遵循http://blog.caboo.se/articles/2008/8/25/sanitize-your-users-html-input的build议,在保存到数据库之前,我正在清理模型中的input,使用before_validate回电话。

我的模型的相关部分如下所示:

include ActionView::Helpers::SanitizeHelper class Post < ActiveRecord::Base { before_validation :clean_input ... protected def clean_input self.input = sanitize(self.input, :tags => %w(biu)) end end 

不用说,这是行不通的。 当我尝试保存新post时,出现以下错误。

 undefined method `white_list_sanitizer' for #<Class:0xdeadbeef> 

显然,SanitizeHelper创build了一个HTML :: WhiteListSanitizer的实例,但是当我将它混合到我的模型中时,它找不到HTML :: WhiteListSanitizer。 为什么? 我能做些什么来解决这个问题?

只要改变第一行如下:

 include ActionView::Helpers 

这将使其工作。

更新:对于Rails 3使用:

 ActionController::Base.helpers.sanitize(str) 

信贷去lornc的答案

这给你一个帮助器方法,没有加载每个ActionView :: Helpers方法到你的模型的副作用:

 ActionController::Base.helpers.sanitize(str) 

要从您自己的控制器访问助手,只需使用:

 OrdersController.helpers.order_number(@order) 

这对我更好:

简单:

 ApplicationController.helpers.my_helper_method 

提前:

 class HelperProxy < ActionView::Base include ApplicationController.master_helper_module def current_user #let helpers act like we're a guest nil end def self.instance @instance ||= new end end 

资料来源: http : //makandracards.com/makandra/1307-how-to-use-helper-methods-inside-a-model

我不会推荐任何这些方法。 相反,把它放在自己的命名空间。

 class Post < ActiveRecord::Base def clean_input self.input = Helpers.sanitize(self.input, :tags => %w(biu)) end module Helpers extend ActionView::Helpers::SanitizeHelper end end 

如果你想在模型中使用helper_method my_helper_method,你可以写:

  ApplicationController.helpers.my_helper_method