Rails异常 - 从控制器获取实例变量

时间:2016-09-26 18:11:29

标签: ruby-on-rails exception sentry

我们在我们的应用程序中使用了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()引发了异常,我希望能够获得有关该帐户的一些信息,例如错误。

这可能吗?如果是的话,怎么样?

1 个答案:

答案 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 属性并自由使用