Rails 3:如何报告控制器"create"操作的错误消息?



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

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

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

根据是否要回滚本地数据库调用,您可能需要考虑使用事务。大致如下:

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有条件地确定。

相关内容

  • 没有找到相关文章

最新更新