2013-04-04 22 views
2

我有一个应用程序,我希望在将用户输入保存到数据库之前对其进行清理。 我可以轻松地在所有模型中添加一个函数clean并用before_validation :clean来调用它,但是我的函数clean是通用的。为整个应用程序定义清理功能rails

我想知道它是否存在一种方法来调用此函数在应用程序中的所有模型验证,并只声明一次。

我做了一些研究,但我没有找到答案给我,它困扰我,重复函数和before_validation在我所有的模型中它不是干的。

非常感谢您的回复。

干杯。

+0

可能复制http://stackoverflow.com/questions/2328984/rails-extending-activerecordbase – 2013-04-04 14:38:36

+0

你给的,为什么你需要清洁输入的例子吗?默认情况下,输入在向用户显示时被视为不安全(您必须调用“原始”来显示任何html标记)。 – 2013-04-04 16:35:27

+0

显示时,输入已清除,但我想在保存到数据库之前将其清除。 – 2013-04-04 16:40:20

回答

1

好!我认为你可能想使用超级模型来进行一些继承,因为注入活动记录库对于你自己来说可能是危险的,所以如果你有一个超级模型从ActiveRecord基础下来,并且在那之后,你创建其他模型下降这一个,你会有这个验证,而不需要再次验证。

class SuperModel < ActiveRecord::Base 
#This if for avoid single table inheritance 
self.abstract_class = true 
#------------------------------------------------------------------------------- 
before_validation :clean 

end 
class Example < SuperModel 
#this will have the before_validation :clean 
end 
+0

看起来正是我所寻找的,但是按照你所说的定义事件返回错误:'未初始化的常量超级模型'有什么想法? – 2013-04-04 16:39:10

+1

Okkkayyy!我很愚蠢。太棒了 ! 它正在做我想要的东西。 非常感谢,你是魔术师! – 2013-04-04 16:43:32

0

我想你想扩展活动记录的验证...... 在此请看: Adding custom validations to ActiveRecord module via extend?

+0

感谢您的帮助。看起来很有趣,但即使在这种情况下,我也必须在所有模型中声明'validates_with'。我认为我可以对所有模型进行自动验证,而无需在每个模型中声明。 – 2013-04-04 15:26:34