我想知道我是否正确理解了Ruby中的begin
/ rescue
构造。我阅读了Ruby文档,但我仍然不确定我是否清楚。我正在我正在构建的Rails站点中实现Stripe付款。 Stripe建议使用begin
/ rescue
。我的付款控制器中有以下代码,基于stripe.com的文档:
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
如果条带费用失败,我不希望在@payment
/ begin
结束后以rescue
开头的部分运行。它看起来在条带充电失败时,救援代码将运行,导致rails重定向到charges_path
,并且以下@payment
代码将无法运行,这是我想要的行为。我能正确理解吗?
答案 0 :(得分:1)
在return
之后添加redirect_to
语句,即
return redirect_to(charges_path)
OR
redirect_to(charges_path)
return