首页 > 解决方案 > 如何处理 ActiveRecord::RecordNotUnique 错误

问题描述

我是 Ruby on Rails 的新手,我一直在寻找如何处理 Ruby 上的错误并找到了这个链接,但它们都不起作用。

redirect_to 无法进入救援块

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我想要的错误,但它不会重定向,而是会转到错误屏幕。

这里有什么遗漏吗?

标签: ruby-on-railserror-handling

解决方案


您可以使用ActiveRecord::RecordInvalid,而不是因为那是由andActiveRecord::RecordNotUnique引发的异常。save!create!

我想我遇到过,不记得什么时候了,看看这里


推荐阅读