2010-11-17 15 views
4

我想创建一个帮助器方法来自动输出具有maxlength属性的text_fields。我想要根据字段属性validates_length验证中指定的max来设置maxlegth,以保持DRY。如何检查存在于ActiveRecord :: Base对象上的验证

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

我也计划从validates_format中提取其他东西,像正则表达式,所以我可以在text_field上设置一个属性,然后js可以使用它来运行客户端验证。

谢谢。

加分:为什么不导轨为我们自动添加maxlength文本字段?

+0

这里的另一个想法。您可以创建一个rake任务,扫描Rails模型的所有代码以查找验证。然后你可以解析所有的验证并将它们转换为javascript。不过,这似乎很多工作。 – monocle 2010-11-18 04:10:51

+0

谢谢单片眼镜,我想到了这一点,但它似乎很哈克!你是对的,听起来像很多工作,这首先是我试图挽救的东西。我将深入研究这个项目的代码,看看他们是如何解决它的:https://github.com/holman/live-validations – 2010-11-19 02:39:14

回答

2

嗯,我不知道这是否是一个'好'的方法,但你可以初始化一个新的对象,调用#有效吗?然后调用#errors来获取属性和错误消息的哈希值。然后你必须解析这些错误消息。

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

好的建议,谢谢。我已经玩过这个,但是这对于获得场地的最大长度似乎没有帮助。这可能是因为该字段为空,因此最大长度验证不会失败,从而导致错误散列中不会显示错误。我希望这是一个通用的东西,所以我不想让最大长度验证在字段上失败,所以我可以访问错误。 – 2010-11-17 13:11:21

9

在Rails 3,您可以调用对象的方法_validators获取将运行验证的名单:

t = Ticket.new 
t._validators 
+0

如果我使用rails 3,那听起来很完美,但我在rails 2.3上。所以不行:-( – 2010-11-17 13:08:38

+0

良好的轨道4以及。 – jpgeek 2016-11-07 00:35:57