我该如何将模型代码中出现的错误消息发送回视图?我的意思是,我有一个
begin
Some code
rescue
Exception Handling
end
现在发生了错误,在救援过程中,我想向控制器发送一条消息,以便在视图中显示。我需要使用一个变量吗,其中必须包含在一个请求中发生的许多错误消息,并将它们连接起来发送回控制器,以便我可以在视图中显示它们?Rails已经显示了一些错误消息,例如"字段不能为空"。我问的是关于在模型代码中存在的函数中发生的其他异常。
我该如何将模型代码中出现的错误消息发送回视图?我的意思是,我有一个
begin
Some code
rescue
Exception Handling
end
现在发生了错误,在救援过程中,我想向控制器发送一条消息,以便在视图中显示。我需要使用一个变量吗,其中必须包含在一个请求中发生的许多错误消息,并将它们连接起来发送回控制器,以便我可以在视图中显示它们?Rails已经显示了一些错误消息,例如"字段不能为空"。我问的是关于在模型代码中存在的函数中发生的其他异常。
我在自己的代码中所做的示例:
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 %>
保存/创建模型时发生的异常
我使用ActiveRecord 回调函数 after_validation、after_validation_on_create 和 before_save(根据情况而定),获取任何额外的数据并验证一切是否准备好保存。然后,如果有任何问题,我使用add_to_base将异常存储在errors[:base]中。这样视图将以与显示任何其他验证错误相同的方式显示错误消息。
请记住,如果before_save方法返回false,则保存将失败。
其他模型方法的异常
所有通常的方法都可用:
在ApplicationController
中设置异常处理程序
class ApplicationController < ActionController::Base
rescue_from Exception, :with => :handle_exception
def handle_exception(error)
flash[:error] = error.message
redirect_to request.referer || root_path
end
end
这是一个通用的例子,你可以指定异常的类型,例如: rescue_from ActiveRecord::RecordNotFound, ActiveRecord::RecordInvalid
等等。
Exception
,因为它是Ruby中最通用的异常类型。在这里可以看到为什么这是一种不好的做法:https://dev59.com/R2kw5IYBdhLWcg3wNn-h - Bruno PeresException
应该非常小心地处理。 - Haris Krajinahandle_exception
需要将error
作为参数传入。 - Motinebegin
some code
rescue StandardError => ex
flash[:error] = "#{ex}"
render :index
end
Exception
,因为它是Ruby中最通用的异常类型。在这里可以看到为什么这是一种不好的做法:https://dev59.com/R2kw5IYBdhLWcg3wNn-h - Bruno Peres