在不保存的情况下运行ActiveRecord验证
问题描述:
我有一个ActiveRecord对象的集合。我希望能够对这些对象中的每一个运行所有验证,而无需实际将它们保存到数据库中。我只想知道,如果他们将是有效的,我将它们保存到数据库。换句话说,我基本上想要为每个对象填充数据结构errors
。有没有办法做到这一点?或者我可能错过了errors
集合的生命周期?在不保存的情况下运行ActiveRecord验证
答
您可以执行以下操作来检查模型是有效的:
@user = User.new
if @user.valid?
#do things
如果你想看到的错误是什么,你可以这样做:
@user = User.new
unless @user.valid?
@user.errors.each {|k, v| puts "#{k.capitalize}: #{v}"}
调用“。有效?”方法运行验证,将所有错误都放入一个ActiveRecord :: Errors对象中,可以像我在上面的例子中那样访问它。如果你喜欢的话,可以在控制台上试一下例子来体验一下。
答
在对象上运行#valid?
方法将运行所有验证并填充errors
结构。
dude = Person.new
unless dude.valid?
# Examine errors
end
沿着类似的路线,我试图显示基于记录的发布链接是否适用于发布或不发布。在我的验证中,我使用验证:如果格式。有没有简单的方法来改变属性说:真,然后检查它是否有效发布? 例如, post = Post.new(:title =>“title”,:published => false) post.published = true if post.valid? post.published = false – chetu 2012-03-05 17:37:12