如何检查ActiveRecord :: Base Objects上存在的验证

时间:2010-11-17 04:03:57

标签: ruby-on-rails validation activerecord

我想创建一个辅助方法来自动输出带有:maxlength属性的text_fields。我希望根据字段属性validates_length验证中指定的:max设置此maxlegth,以便保持DRY。

我的问题是:是否有一种很好的方法来检查对象属性上存在的验证,然后从该验证中提取最大长度。

我还计划从validates_format中提取其他内容,例如正则表达式,这样我就可以在text_field上设置一个属性,然后js可以使用该属性来运行客户端验证。

感谢。

奖励积分:为什么没有Rails自动为我们添加maxlength到文本字段?

2 个答案:

答案 0 :(得分:9)

在Rails 3中,您可以调用对象上的_validators方法来获取将运行的验证器列表:

t = Ticket.new
t._validators

答案 1 :(得分:2)

好吧,我不知道这是不是'好'的方式,但你可以初始化一个新对象,调用#valid?在它上面然后调用#errors来获取属性和错误消息的哈希值。然后你必须解析那些错误信息。

user = User.new
user.valid?
errors_hash = user.errors