ActiveRecord创建(不!)在验证时抛出异常

时间:2010-06-14 03:30:06

标签: ruby-on-rails validation exception activerecord

所以我使用ActiveRecord模型验证来验证RESTful应用程序中的表单。

我有一个创建动作:

@association = Association.new

并且表单的接收端使用表单参数创建属性的数据哈希以使用以下方法保存到数据库:

@association = user.associations.create(data)

如果验证失败,我想简单地渲染创建操作。问题是.create(not!)方法在模型验证失败的情况下抛出异常。例如:

validates_format_of :url,         :with => /(^$)|(^(http|https):\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(([0-9]{1,5})?\/.*)?$)/ix, :message => "Your url doesn't seem valid."
模型中的

产生:

ActiveRecord::RecordInvalid Exception: Validation failed: Url Your url doesn't seem valid.

我以为.create!应该抛出异常,而.create不是。

我在这里错过了什么吗?

Ruby 1.8.7 patchlevel 173& rails 2.3.3

1 个答案:

答案 0 :(得分:9)

仔细阅读createcreate!的文档。

createcreate!都会检查回调(在您的案例验证中)。  create方法如果引发异常则返回false,如果不是则返回true,  如果记录无效,create!方法会引发异常。

但是,如果您在数据库中有唯一索引且模型上没有验证集,则create 可以抛出ActiveRecord::RecordNotUnique。在这种情况下,您应该将validates :fieldname, uniqueness: true添加到模型中。