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

Posted

技术标签:

【中文标题】Pundit gem 错误类覆盖我在 ruby​​ 中的自定义错误类【英文标题】:Pundit gem error class overriding my custom error class in ruby 【发布时间】:2021-03-14 08:59:02 【问题描述】:

我的应用程序定义了自定义错误类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?

【问题讨论】:

【参考方案1】:

这是 Pundit 存储库中的 known issue,正如那里的讨论中所述,解决它的唯一方法(当前)是暂时使用 ::Error::CustomError

【讨论】:

以上是关于Pundit gem 错误类覆盖我在 ruby​​ 中的自定义错误类的主要内容,如果未能解决你的问题,请参考以下文章

Rails 4 with Pundit & Statesman gem - 对象处于状态时的策略

ruby学习笔记

Ruby Pundit 授权用户和合作者

乘客:无法加载此类文件 ruby​​gems/builder

在Ruby中捆绑gem加载错误

ruby gem install显示错误(Gem::RemoteFetcher::FetchError)