gpt4 book ai didi

ruby-on-rails - 如何在 save() 期间捕获 ActiveRecord::RecordNotFound 异常?

转载 作者:行者123 更新时间:2023-12-04 06:25:18 26 4
gpt4 key购买 nike

我的数据库中有一个带有电子邮件列的用户表。我还在电子邮件列上创建了一个唯一索引,以防止两个用户注册同一个电子邮件地址(注意:请不要建议我使用 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 索引确实在工作。问题是,我该如何处理这个异常?我希望能够捕捉到它,然后在模型的错误集合中添加一条合理的消息。

我尝试过 - 未成功 - 在 Controller 中使用rescue_from,如下所示:
rescue_from 'ActiveRecord::RecordNotUnique' do |ex|
raise 'Email must be unique'
end

Rails API 文档似乎没有建议如何覆盖 save() 方法以添加开始/救援 block ,所以我的问题是:如何处理保存期间抛出的 ActiveRecord::RecordNotUnique 异常() 然后将模型标记为无效并将合理的错误消息添加到模型的错误集合中?

最佳答案

class User
...
def save
super
rescue 'ActiveRecord::RecordNotUnique'
logger.error($!.to_s) # or something like that.
end
end

您可以重载模型中的任何操作,然后调用 super执行继承的方法定义

Rails API prolly 没有提到它,因为它是 Ruby 的一个特性,而不仅仅是 Rails。

关于ruby-on-rails - 如何在 save() 期间捕获 ActiveRecord::RecordNotFound 异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6115874/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com