在表单上的“创建”操作中,我成功地将 (1) MyObject 保存到我的本地数据库和 (2) OtherObject 通过其 Ruby API 保存到第三方数据库。当保存到第三方出现问题时,我会收到一个 Ruby 异常形式的错误。
我的问题是:如何停止表单提交并向客户报告异常消息?
如果这是不可能的,那么最好的选择是什么?
在表单上的“创建”操作中,我成功地将 (1) MyObject 保存到我的本地数据库和 (2) OtherObject 通过其 Ruby API 保存到第三方数据库。当保存到第三方出现问题时,我会收到一个 Ruby 异常形式的错误。
我的问题是:如何停止表单提交并向客户报告异常消息?
如果这是不可能的,那么最好的选择是什么?
根据您是否要回滚本地数据库调用,您可能需要考虑使用Transactions。这些方面的东西:
def create
ActiveRecord::Base.transaction do
@myobject = MyObject.create!(params[:myobject])
begin
# call third-party
rescue Exception => e
flash[:exception] = e.message
raise ActiveRecord::Rollback # Raise this to cause a rollback on MyObject
end
end
# redirect_to or render... might have to pick depending on if you got an exception
end
这会将异常消息存储到flash
您可以用来向用户显示的消息中。注意不要将整个Exception
对象存储到 中flash
,如果您的异常对象太大,您肯定会看到溢出错误。
如果您不太关心回滚MyObject
创建,那么您可以使用一个简单的begin
...rescue
类似于我在示例中展示的内容。您可能需要根据是否发生异常来确定是否要执行redirect_to
或执行render
,但您始终可以根据是否发生有条件地flash[:exception].nil?
确定true
。