0

在表单上的“创建”操作中,我成功地将 (1) MyObject 保存到我的本地数据库和 (2) OtherObject 通过其 Ruby API 保存到第三方数据库。当保存到第三方出现问题时,我会收到一个 Ruby 异常形式的错误。

我的问题是:如何停止表单提交并向客户报告异常消息?

如果这是不可能的,那么最好的选择是什么?

4

1 回答 1

1

根据您是否要回滚本地数据库调用,您可能需要考虑使用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

于 2013-02-01T01:11:27.283 回答