Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 使用Ruby一次性收费正确处理条带错误和异常_Ruby On Rails_Ruby_Ruby On Rails 3_Error Handling_Stripe Payments - Fatal编程技术网

Ruby on rails 使用Ruby一次性收费正确处理条带错误和异常

Ruby on rails 使用Ruby一次性收费正确处理条带错误和异常,ruby-on-rails,ruby,ruby-on-rails-3,error-handling,stripe-payments,Ruby On Rails,Ruby,Ruby On Rails 3,Error Handling,Stripe Payments,我已经查看了,但是仍然无法正确处理/重定向这些错误。基本上,无论发生什么情况,我都希望他们返回到edit操作(通过edit\u profile\u path)并向他们显示消息(无论是否成功) 我在编辑操作上有一个表单,它发布到更新操作。使用有效的信用卡,此功能正常工作(费用在仪表板中)。我正在使用Stripe.js class ExtrasController < ApplicationController def edit @extras = current_user.ex

我已经查看了,但是仍然无法正确处理/重定向这些错误。基本上,无论发生什么情况,我都希望他们返回到
edit
操作(通过
edit\u profile\u path
)并向他们显示消息(无论是否成功)

我在
编辑
操作上有一个表单,它发布到
更新
操作。使用有效的信用卡,此功能正常工作(费用在仪表板中)。我正在使用Stripe.js

class ExtrasController < ApplicationController

  def edit
    @extras = current_user.extras
  end

  def update

    Stripe.api_key = "hidden"

    token = params[:stripeToken]

    begin
      charge = Stripe::Charge.create(
        :amount => 5000, # amount in cents
        :currency => "usd",
        :card => token,
        :description => current_user.email
      )
    rescue Stripe::CardError => e
      # redirect_to edit_extras_path, notice: e.message
      # What I'm trying to do, but obviously results in AbstractController::DoubleRenderError
    rescue => e
      # Something else happened, completely unrelated to Stripe
      # Display a generic error message
    end

    redirect_to edit_extras_path, notice: "Card charged successfully."
  end

end
类外部控制器5000,#金额单位为美分
:货币=>“美元”,
:card=>token,
:description=>current_user.email
)
救援条带::CardError=>e
#重定向到编辑附加路径,注意:e.message
#我试图做的,但显然会导致AbstractController::DoubleRenderError
救援=>e
#发生了另一件事,与Stripe完全无关
#显示一般错误消息
结束
重定向到编辑额外路径,注意:“卡已成功充值。”
结束
结束
虽然您现在可以将flash消息传递到
重定向到
,但您仍然可以自己操作flash

因此,只需对更新代码做一点小改动,您就可以随心所欲:

def update

  Stripe.api_key = "hidden"

  token = params[:stripeToken]

  begin
    charge = Stripe::Charge.create(
      :amount => 5000, # amount in cents
      :currency => "usd",
      :card => token,
      :description => current_user.email
    )
    # No exceptions were raised; Set our success message.
    flash[:notice] = 'Card charged successfully.'
  rescue Stripe::CardError => e
    # CardError; display an error message.
    flash[:notice] = 'That card is presently on fire!'
  rescue => e
    # Some other error; display an error message.
    flash[:notice] = 'Some error occurred.'
  end

  redirect_to edit_extras_path
end

为了使消息的用途更加明确,您可能需要将错误状态中的
通知
替换为
警报
错误
闪烁类型;然后,您可以轻松地使用CSS对它们进行样式化,以一目了然地指示成功或失败。(例如,每一个都提供了显示各种类型警报的样式。)

我对这种方式研究得太多了,哈哈。感谢您提供的简单解决方案。是的,我用
警报
vs
通知
闪烁来做到这一点。干杯忽略简单的事情总是很容易的!很高兴它起到了作用。我建议你在有机会的时候把这个逻辑转移到一个模型上。我在发布这篇文章后就这样做了。谢谢你的推荐。好家伙-我实际上把我的移动到了一个专用的服务对象,因为我觉得它不适合任何型号。