Pundit gem 错误类覆盖了我在 ruby 中的自定义错误类

Pundit gem error class overriding my custom error class in ruby

提问人:Nijeesh Joshy 提问时间:12/2/2020 最后编辑:Nijeesh Joshy 更新时间:12/2/2020 访问量:177

问:

我的应用程序定义了自定义错误类lib/error/*

#lib/error/custom_error.rb

module Error
      class CustomError < StandardError
        attr_accessor :error, :status, :message
    
        def initialize error, status, message
          @error    = error || :unprocessable_entity
          @status   = status || 422 
          @message  = message  || 'Something went wrong'
        end

        # this is just an example
        def raise_unauth_error
          raise "un auth"
        end
    
      end 
    end

这已经用在了大量的控制器中,只是通过包含它,比如

class Api::UsersController < Api::ApiBaseController
   include Error::CustomError

   def set_user
     .
     .
     .
     raise Error::CustomError.new('sample message', 404, ""?) unless @user
   end

   def user_check
     raise_unauth_error unless @user.admin?
   end
end

我最近将 pundit gem 添加到我的应用程序中

class Api::ApiBaseController < ActionController::Api
  include Pundit
end

现在我从任何地方收到错误说,。如果我像这样包含错误类,它就会消失,但是如果我必须这样做,那么我必须在很多地方进行此编辑Pundit::Error::CustomError (NameError)::Error::CustomError

有没有办法在不覆盖自定义错误类的情况下包含 Pundit Gem?

Ruby-on-Rails Ruby-on-Rails-3.2 Pundit Ruby-2.2

评论


答:

1赞 Cassandra S. 12/2/2020 #1

这是 Pundit 存储库中的一个已知问题,正如那里的讨论中所指出的,解决它的唯一方法(目前)是暂时使用。::Error::CustomError