2009-07-31 60 views
10

我有一个ActiveRecord对象的集合。我希望能够对这些对象中的每一个运行所有验证,而无需实际将它们保存到数据库中。我只想知道,如果他们将是有效的,我将它们保存到数据库。换句话说,我基本上想要为每个对象填充数据结构errors。有没有办法做到这一点?或者我可能错过了errors集合的生命周期?在不保存的情况下运行ActiveRecord验证

回答

23

您可以执行以下操作来检查模型是有效的:

@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对象中,可以像我在上面的例子中那样访问它。如果你喜欢的话,可以在控制台上试一下例子来体验一下。

+0

沿着类似的路线,我试图显示基于记录的发布链接是否适用于发布或不发布。在我的验证中,我使用验证:如果格式。有没有简单的方法来改变属性说:真,然后检查它是否有效发布? 例如, post = Post.new(:title =>“title”,:published => false) post.published = true if post.valid? post.published = false – chetu 2012-03-05 17:37:12

2

在对象上运行#valid?方法将运行所有验证并填充errors结构。

dude = Person.new 
unless dude.valid? 
    # Examine errors 
end 
相关问题