关于rails上的ruby:救援块中redirect_to的行为

Behavior of redirect_to in rescue block

我想知道我是否正确理解了Ruby中的begin / rescue构造。 我阅读了Ruby文档,但我仍然不确定我是否清楚。 我正在我正在构建的Rails站点中实现Stripe付款。 Stripe建议使用begin / rescue。 我在基于stripe.com的文档的支付控制器中有以下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
begin
  charge = Stripe::Charge.create(
    :amount      => @amount,
    :card        => token,
    :description => 'Rails Stripe customer',
    :currency    => 'usd'
  )
rescue Stripe::CardError => e
  flash[:error] = e.message
  redirect_to charges_path
end

@payment = Payment.new(params[:payment])
if @payment.save
  flash[:notice] ="Payment taken for #{number_to_currency(@amount/100)}."
else
  flash[:notice] ="Payment record not created."
  redirect_to charges_path
end

如果对条带的收费失败,我不希望在begin / rescue结束之后以@payment开头的部分运行。 它看起来在条带充电失败时,救援代码将运行,导致rails重定向到charges_path,并且后续的@payment代码将无法运行,这是我想要的行为。 我理解正确吗?


redirect_to之后添加return语句,即

1
return redirect_to(charges_path)

要么

1
2
redirect_to(charges_path)
return