【发布时间】:2011-05-24 19:36:04
【问题描述】:
我的数据库中有一个带有电子邮件列的用户表。我还在电子邮件列上创建了一个唯一索引,以防止两个用户注册同一个电子邮件地址(注意:请不要建议我使用validates_uniqueness_of,因为这是我试图避免的)。
当我运行 RSpec 测试以确保无法插入重复记录时,我看到以下错误:
Failures:
1) User should not allow duplicate email addresses
Failure/Error: user2.save.should_not be_true
ActiveRecord::RecordNotUnique:
SQLite3::ConstraintException: column email is not unique: INSERT INTO "users" ("email", ... ) VALUES ( ... )
# ./spec/models/user_spec.rb:26
这很好,因为这意味着我的 UNIQUE 索引确实在工作。问题是,我该如何处理这个异常?我希望能够捕捉到它,然后在模型的错误集合中添加一条合理的消息。
我尝试过 - 未成功 - 在控制器中使用 rescue_from 如下:
rescue_from 'ActiveRecord::RecordNotUnique' do |ex|
raise 'Email must be unique'
end
Rails API 文档似乎没有建议如何覆盖 save() 方法以添加开始/救援块,所以我的问题是:如何处理正在发生的 ActiveRecord::RecordNotUnique 异常在 save() 期间抛出然后将模型标记为无效并向模型的错误集合添加合理的错误消息?
【问题讨论】:
标签: ruby-on-rails ruby activerecord