我们在我们的应用程序中使用了raven-sentry,我希望有一个默认的' catch all'一组适用于所有错误的额外选项。
class StandardError
def raven_context
extra = {}
#add conditional key/values to the hash if they exist
extra[:account_id] = @account.id if @account
extra.empty? ? {} : { extra: extra }
end
end
因为异常是从模型或控制器中的实例化类中引发的,所以我认为我能够访问这些变量。如果帐户#show引发异常,我希望能够访问@account。如果Account.create()引发了异常,我希望能够获得有关该帐户的一些信息,例如错误。
这可能吗?如果是的话,怎么样?
答案 0 :(得分:0)
您可以按照Rails idea关注如何捕获/引发异常,例如<header>
<img src="http://i.imgur.com/xZaujwq.png">
</header>
所以基本上你可以设计一个通用错误,如:
ActiveRecord::RecordInvalid
所以现在当你提出错误时,只需传递必要的参数:
class MyGenericError < StandardError
attr_reader :account, :others
def initialize(message = nil, account = nil, others={})
@account = account
@others = others
super(message)
end
end
class MySpecificError < MyGenericError; end
最后,在捕获错误时,您只需获取raise MySpecificError.new('doing something wrong', @account) if doing_something_wrong
属性并自由使用