Rails异常处理

如何将模型代码中发生的错误消息发回给视图。 我的意思是。 我有一个

begin
       Some code
rescue
       Exception Handling
end

现在发生错误并且在救援中,我想向控制器发送一条消息,以便它将显示在视图中。 我是否必须使用一个变量,该变量必须包含发生在一个请求中的大量错误消息,将它们连接并将它们发送回控制器,以便我可以在视图中显示它? Rails已经显示了一些错误消息,如字段不能为空。 我在询问模型代码中存在的其他例外情况。


作为保存/创建模型的一部分发生的例外情况

我使用ActiveRecord回调函数after_validation,after_validation_on_create和before_save(取决于环境),获取任何额外数据并验证所有内容都已准备好保存。 然后,如果有任何问题,我使用add_to_base将错误存储在错误[:base]中。 这样视图将以与显示任何其他验证错误相同的方式显示错误消息。

请记住,如果您的before_save方法返回false,则保存将失败。

其他模型方法的例外

所有常用的方法都可用:

  • 引发控制器将捕获的特定异常。 该异常可能包含视图转换为错误消息的错误编号。 或者模型可以将error_num导出到error_msg散列
  • 返回一个错误代码作为方法的返回参数。 例如,如果你想在工作的时候使用Flash来给出肯定的消息,你可以返回一个msg_code。 然后,对于不同类型的成功,有消极的味精代码错误和积极的代码。
  • 建立一个@error(或其他)实例变量,由调用者检查。

  • 我在自己的代码中做的一个例子:

    def create
      @letter = Letter.new(params[:id])
    
      begin
        @letter.do_something_that_could_throw_an_exception
        flash[:notice] = I18n.translate('letter.success_create')
      rescue => e
        logger.error "letter_controller::create => exception #{e.class.name} : #{e.message}"
        flash[:error] = "#{I18n.translate('letter.letter_create_failed')}<br/>Detailed error: #{e.message}"
        ExceptionNotifier.deliver_exception_notification(e, self, request)
        # redirect somewhere sensible?
      end
    end
    

    结束

    这有帮助吗?


    begin
           Some code
    rescue =>e
           @error= e.message
           Exception Handling
    end
    

    在视图中

    <%= @error %>
    
    链接地址: http://www.djcxy.com/p/25849.html

    上一篇: Rails Exception Handling

    下一篇: Ruby rescue all exceptions except MyException