Dou*_*oug 2 ruby return ruby-on-rails break
我有一个嵌套在其他几个方法中的方法,我希望这个方法break来自所有带有返回错误的递归方法.例如,如果我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
Run Code Online (Sandbox Code Playgroud)
并pay_order定义为:
def pay_order(order, token)
begin
order.pay(source: token)
rescue Stripe::CardError => e
break e
end
end
Run Code Online (Sandbox Code Playgroud)
如何突破所有父方法并返回来自付款失败的卡错误?我需要这样的东西break and return e或return e and break.但是我知道这些break和return语句都会立即返回,所以我不能将它们链接起来(我不认为).
我可以只添加return语句来调用各项功能,但我打算在很多地方使用这种方法,而不要永远需要它的行为方式不同计划,所以我在寻找写它的最可重用的方式.
为什么你rescue在这个pay_order方法里面?我在外环上救援.鉴于以下内容:
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
Run Code Online (Sandbox Code Playgroud)
我在里面拯救method_a,例如:
def method_a
10.times do |loop_a|
method_b
end
rescue Stripe::CardError => e
# do whatever. no need to break
end
Run Code Online (Sandbox Code Playgroud)
通过引发异常,所有循环都会自动"中断".
如果你想在pay_order方法中对异常做一些事情,那么我建议再次进行救援和提升:
def pay_order
order.pay
rescue Stripe::CardError => e
# do your stuff
raise e
end
Run Code Online (Sandbox Code Playgroud)