【问题标题】:Define a sanitize function for the whole application rails为整个应用程序轨定义清理功能
【发布时间】:2013-03-26 16:28:23
【问题描述】:

我有一个应用程序,我想在将用户输入保存到数据库之前对其进行清理。 我可以很容易地在所有模型中添加一个函数clean 并用before_validation :clean 调用它,但我的函数clean 是通用的。

我想知道是否有一种方法可以为应用程序中的所有模型验证调用此函数并且只声明一次。

我已经进行了一些研究,但我没有找到适合我的答案,这让我很困扰,在我的所有模型中重复该函数和 before_validation 它还不是很干燥。

提前感谢您的回复。

干杯。

【问题讨论】:

  • 您能举例说明为什么需要清理输入吗?默认情况下,当您向用户显示时,输入被视为不安全(您必须调用“raw”来显示任何 html 标签)。
  • 显示时,输入已被清理,但我想在保存到数据库之前清理它

标签: ruby-on-rails validation dry sanitize


【解决方案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

【讨论】:

  • 似乎正是我所寻找的,但按照你说的定义事物返回错误:uninitialized constant SuperModel 任何想法?
  • 好吧!我很笨。太棒了 !它正在做我想要的。非常感谢你,你很神奇!
【解决方案2】:

我认为您想扩展活动记录验证... 看看这个: Adding custom validations to ActiveRecord module via extend?

【讨论】:

  • 感谢您的帮助。看起来很有趣,但即使在这种情况下,我也必须在所有模型中声明 validates_with。我认为我可以对所有模型进行自动验证,而无需在每个模型中声明。
猜你喜欢
  • 2016-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-03
  • 2017-09-15
  • 1970-01-01
  • 2015-01-26
  • 1970-01-01
相关资源
最近更新 更多