ruby-on-rails - 如何处理 ActiveRecord::RecordNotUnique 错误
问题描述
我是 Ruby on Rails 的新手,我一直在寻找如何处理 Ruby 上的错误并找到了这个链接,但它们都不起作用。
https://www.ruby-forum.com/t/begin-rescue-not-working/118832/5
Rails 3:处理 ActiveRecord::RecordNotUnique 异常
https://www.honeybadger.io/blog/ruby-exception-vs-standarderror-whats-the-difference/
在我的创建方法中,我有这个
def create
@departments = Spree::Department.new(department_params)
begin
@departments.save
flash[:success] = 'Department Created'
redirect_to admin_departments_path
rescue ActiveRecord::RecordNotUnique => e
flash[:notice] = 'Department name already exists'
redirect_to admin_departments_path
return
end
end
但问题是它不会rescue
阻塞,所以它不会渲染flash[:notice]
它会渲染和重定向,简而言之,即使它出错,flash[:success]
它也会这样做。begin
同样,@department.save
当我添加!
(砰)时,如果我输入的名称不是唯一的,我会收到一个Validation failed: Name has already been taken
我想要的错误,但它不会重定向,而是会转到错误屏幕。
这里有什么遗漏吗?
解决方案
您可以使用ActiveRecord::RecordInvalid
,而不是因为那是由andActiveRecord::RecordNotUnique
引发的异常。save!
create!
我想我遇到过,不记得什么时候了,看看这里
推荐阅读
- flutter - 使用相机包授予权限会在异常时暂停调试器
- c# - 在版本化 REST API 中使用模块
- sql - 如何剪一张桌子?
- python - 在python中获取2dnumpy数组的前三个最大值
- mysql - 当值是 XX_YY_ZZ 形式但在没有下划线的情况下工作时,使用 TKinter 中的 Entry 时更新 MySQL 中的表会导致错误
- android - 如何在 Android Studio 中通过 gradle 生成 Android Apk?
- firebase - 为 Firebase 托管带宽使用情况设置警报
- javascript - 任何人都可以将此函数从 python 转换为 javascript 吗?
- sql-server - 如何在 xml 查询中不返回空元素
- python - 为什么 GridSearchCV 方法的准确性低于标准方法?