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 - 对象处于状态时的策略