2011-05-27 49 views
4

我有我自己的异常处理程序:Rails的:再加注Mongoid和BSON例外,我自己的异常

module Frog 
    module Errors 
    class NotFound < FrogError 
     attr_accessor :exception 

     def initialize (exception) 
     self.exception = exception 
     end 

     def as_json 
     { 
      :error => { 
      :message => "Object not found" 
      } 
     } 
     end 

     def status_code 
     404 
     end 
    end 
    end 
end 

在application_controller.rb这种异常是由

rescue_from Frog::Errors::FrogError, :with => :render_frog_error 

def render_frog_error(exception) 
    access_control_headers! 
    render :json => exception, :status => exception.status_code 
end 
处理

在我的项目中,我有BSON :: InvalidObjectId和Mongoid :: Errors :: DocumentNotFound异常。我想自己生成这些例外。我尝试这种方式:

rescue_from BSON::InvalidObjectId do 
    |ex| raise Frog::Errors::NotFound.new(ex) 
end 

但它不工作。 我该如何重新评估BSON和Mongoid异常?

回答

2

我发现这个解决方案:

rescue_from BSON::InvalidObjectId, :with => :proxy_exception 
rescue_from Mongoid::Errors::DocumentNotFound, :with => :proxy_exception 

def proxy_exception(exception) 
     exception = Frog::Errors::NotFound.new(exception) 
     render_frog_error(exception) 
end