首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >递归可以用来保证将对象保存到Ruby中的DB中吗?

递归可以用来保证将对象保存到Ruby中的DB中吗?
EN

Stack Overflow用户
提问于 2017-07-07 23:21:53
回答 3查看 35关注 0票数 0

我正在向我的子商人付款,并想知道我是否可以使用递归来保证当支付给他们时,我们将数据保存到我们的DB中。

示例:

代码语言:javascript
复制
def make_payout
  result = object.process_payout_through_gateway
  if result.success?
    payout = Payout.new
    payout[:paid] = true
    save_payout(payout)
  end
end

def save_payout(payout)
  begin
    payout.save!
  rescue e
    save_payout(payout)
  end
end
EN

回答 3

Stack Overflow用户

发布于 2017-07-07 23:43:32

如果您想访问gaunrentee,则在不验证对象的情况下保存它:

payout.save(validate: false)

票数 2
EN

Stack Overflow用户

发布于 2017-07-08 00:08:48

简单的回答是no。除非错误是暂时的,否则一次又一次地重新尝试保存操作将无助于您,而且在某些情况下甚至会加剧问题。

如果期望某些错误在正常操作中经常发生,则可以选择通过重试操作来选择性地处理这些错误。这里的关键字是选择性的--如果您盲目地rescue所有的东西,您就冒着重新尝试操作的风险,即使错误是由一些您无法正常恢复的东西引起的,比如编程错误。因此,您应该始终指定希望rescue的特定异常类。

代码语言:javascript
复制
begin
  payout.save!
rescue ExceptionThatHappensSometimesButIsNoBigDeal
  # ignore error + maybe log it, etc.
end

捕获某些异常并稍后重新尝试操作是与非关键的外部API交谈时经常使用的策略,因为这些API在任何时候都可能发生短暂的中断。如果你不忽视这些非关键的例外情况,它们就会冒出来,同时也会让你的应用程序崩溃。

然而,重试失败的操作,这些操作只触及您控制的系统(例如保存到本地数据库),通常会适得其反--如果您默默地忽略了这些错误,则可能无法及时发现这些错误。

票数 1
EN

Stack Overflow用户

发布于 2017-07-07 23:53:24

谢谢各位,所有的答案都很好。我个人认为:

代码语言:javascript
复制
def save_payout(payout)
  begin
    payout.save!
  rescue e
    puts "Payment to User-ID: #{current_user.id} FAILED TO SAVE! #{e}"
    UserMailer.send_payout_failure_email(current_user.id).deliver_now
  end
end

我不会给出一个“正确”的答案,只会让每个人都站起来-投票给他们最喜欢的路线。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44980948

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档