救援区中redirect_to的行为

时间:2013-08-11 16:59:45

标签: ruby-on-rails ruby

我想知道我是否正确理解了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代码将无法运行,这是我想要的行为。我能正确理解吗?

1 个答案:

答案 0 :(得分:1)

return之后添加redirect_to语句,即

return redirect_to(charges_path)

OR

redirect_to(charges_path)
return