我正在编写一个处理来自文本区域的用户输入的模型。按照http://blog.caboo.se/articles/2008/8/25/sanitize-your-users-html-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(b i u))
end
end
不用说,这不管用。当我尝试保存新帖子时,出现以下错误。
undefined method `white_list_sanitizer' for #<Class:0xdeadbeef>
显然,SanitiseHelper创建了一个HTML::WhiteListSaniizer的示例,但当我将其混合到我的模型中时,它找不到HTML::WhiteListSaniizer。为什么?我能做些什么来修复它呢?
7条答案
按热度按时间kwvwclae1#
只需按如下方式更改第一行:
这将使其发挥作用。
**更新:**对于rails 3,请使用:
功劳归于lornc's answer
lawou6xi2#
这为您提供了Helper方法,而不会产生将每个ActionView::Helpers方法加载到模型中的副作用:
neskvpey3#
这对我来说更有效:
简单:
前进:
来源:http://makandracards.com/makandra/1307-how-to-use-helper-methods-inside-a-model
kpbwa7wx4#
要从您自己的控制器访问助手,只需使用:
jv4diomz5#
如果要在模型中使用
my_helper_method
,可以编写:7ivaypg96#
我不推荐这些方法中的任何一个。相反,应将其放在其自己的命名空间中。
ncecgwcz7#
在Rails 7中:
可用的消毒剂列表:https://github.com/rails/rails-html-sanitizer#sanitizers
然后,您的模型将是: