gpt4 book ai didi

ruby-on-rails - 打破和返回值的最佳方式

转载 作者:数据小太阳 更新时间:2023-10-29 08:25:55 26 4
gpt4 key购买 nike

我有一个嵌套在其他几个方法中的方法,我希望此方法从所有返回错误的递归方法中中断。例如,如果我在这里调用了 pay_order:

class API::StripeController < ApiController
def my_api_action
# ...
order = create_order
pay_order(order, token)
# do things if payment is successful
end
end

pay_order定义为:

def pay_order(order, token)
begin
order.pay(source: token)
rescue Stripe::CardError => e
break e
end
end

如何跳出所有父方法并返回因支付失败而导致的卡错误?我需要像 break and return ereturn e and break 这样的东西。但我知道 breakreturn 语句都会立即返回,所以我不能将它们链接起来(我不认为)。

我可以将 return 语句添加到每个被调用的函数中,但我计划在很多地方使用这个方法,并且不打算需要它有不同的行为,所以我'我正在寻找最可重用的方式来编写它。

最佳答案

为什么要在pay_order 方法中rescue?我会在外圈救援。鉴于以下情况:

def method_a
10.times do |loop_a|
method_b
end
end

def method_b
5.times do |loop_b|
pay_order
end
end

def pay_order
...
end

我会在 method_a 中进行救援,例如:

def method_a
10.times do |loop_a|
method_b
end
rescue Stripe::CardError => e
# do whatever. no need to break
end

所有循环都因异常的引发而自动“中断”。

如果你想在 pay_order 方法中做一些异常的事情,那么我会建议 rescue 并再次 raise :

def pay_order
order.pay
rescue Stripe::CardError => e
# do your stuff
raise e
end

关于ruby-on-rails - 打破和返回值的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51184506/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com