如何将模型代码中发生的错误消息发送回视图。我的意思是。我有一个
begin
Some code
rescue
Exception Handling
end
现在发生错误并且在救援中,我想将消息发送回控制器,以便它将在视图中显示。我是否必须使用一个变量,该变量必须包含一个请求中出现的大量错误消息,将它们连接起来并将其发送回控制器,以便我可以在视图中显示它? Rails已经显示一些错误消息,如字段不能为空。我在询问其他异常,这些异常发生在模型代码中的函数中。
答案 0 :(得分:12)
我在自己的代码中做的一个例子:
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
端
这有帮助吗?
答案 1 :(得分:7)
begin
Some code
rescue =>e
@error= e.message
Exception Handling
end
视图中的
<%= @error %>
答案 2 :(得分:6)
作为保存/创建模型的一部分而发生的例外
我使用ActiveRecord callbacks after_validation,after_validation_on_create和before_save(取决于具体情况)来获取任何额外数据并验证是否已准备好保存所有内容。然后,如果有任何问题,我使用add_to_base将异常存储在错误[:base]中。这样,视图将以与显示任何其他验证错误相同的方式显示错误消息。
请记住,如果您的before_save方法返回false,则保存将失败。
其他模特方法的例外
所有常用方法都可用:
答案 3 :(得分:3)
begin
some code
rescue StandardError => ex
flash[:error] = "#{ex}"
render :index
end
答案 4 :(得分:3)
在ApplicationController
class ApplicationController < ActionController::Base
rescue_from Exception, :with => :handle_exception
def handle_exception
flash[:error] = error.message
redirect_to request.referer || root_path
end
end
这是一般示例,您可以指定例外类型,例如rescue_from ActiveRecord::RecordNotFound, ActiveRecord::RecordInvalid
等。