给定以下方法
def change_plan_to(plan_id)
new_plan = Plan.find plan_id
stripe_customer = Stripe::Customer.retrieve(stripe_customer_token)
stripe_customer.update_subscription(plan: new_plan.slug)
self.plan = new_plan
self.active = true
save
rescue Stripe::InvalidRequestError => e
logger.error "[STRIPE] #{ e }"
errors.add :base, "Unable to change your plan!"
false
end
特别是第 4-6 行。我希望 4 和 5 只有在 4 成功时才会发生,但 Stripe 不会返回将其包装在 if 中的能力。如果它出错,它只会抛出 Stripe::InvalidRequestError。
处理这个问题的最佳方法是什么?Fire & forget 并允许 Stripe webhook 回调根据需要管理过期的活动状态?
另一种情况是如果第 4 行没有通过,所有代码都会在第 4 行之后停止。救援是这样的吗?