无需保存即可运行ActiveRecord验证

时间:2009-07-31 17:13:01

标签: ruby activerecord

我有一组ActiveRecord对象。我希望能够为每个对象运行所有验证,而不实际将它们保存到数据库中。我只是想知道他们是否有效我将它们保存到数据库中。换句话说,我基本上想要为每个对象填充errors数据结构。有没有办法做到这一点?或许我遗漏了errors集合的生命周期?

2 个答案:

答案 0 :(得分:24)

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

@user = User.new
if @user.valid?
  #do things

如果您想查看错误是什么,可以执行以下操作:

@user = User.new
unless @user.valid?
  @user.errors.each {|k, v| puts "#{k.capitalize}: #{v}"}

调用“.valid?”方法运行您的验证,将所有错误放入ActiveRecord :: Errors对象,可以像上面的示例中那样访问它。如果您愿意,可以在控制台中尝试使用这些示例,以便了解它。

答案 1 :(得分:3)

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

dude = Person.new
unless dude.valid?
  # Examine errors
end