У меня есть метод, который вложен в пару других методов, и я хочу, чтобы этот метод 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
А pay_order
определяется как:
def pay_order(order, token)
begin
order.pay(source: token)
rescue Stripe::CardError => e
break e
end
end
Как мне выйти из всех родительских методов и вернуть ошибку карты, возникшую из-за неудавшегося платежа? Мне нужно что-то вроде break and return e
или return e and break
. Но я знаю, что операторы break
и return
немедленно возвращаются, поэтому я не могу их связать (я не думаю).
Я мог бы просто добавить return
операторов к каждой вызываемой функции, но я планирую использовать этот метод во многих местах, и не планирую когда-либо, чтобы он вел себя по-другому, поэтому я ищу наиболее многоразовый способ написать это.