0

我有一个使用此 railscast 设置的多步 Rails 3 表单:http ://railscasts.com/episodes/217-multistep-forms ,我使用另一个 railscast 为我的应用程序实施 Stripe 支付:http:// railscasts.com/episodes/288-billing-with-stripe

在我的应用程序中,如果向用户收取的金额为 0,则通过 jQuery 隐藏付款表单。

$(document).ready(function() {
  var xyz = $("span#total").text();

  if (xyz == 0){
    $("div#stripefields").hide();
  };    
});

我想要做的是告诉我的 Rails 应用程序,如果向用户收取的金额为 0,则不需要 Stripe 支付字段来成功提交表单。因此,我需要在控制器中修改此语句以反映这一点:

elsif @video.last_step?
   @video.save if @video.all_valid? && @video.save_with_payment(@total) 

@total 是向用户收取的金额,“save_with_payment”代表 Stripe 费用。这样做的最佳方法是什么?我可以以某种方式在此语句中添加另一个“if”吗?

4

1 回答 1

4

编辑:对不起,我打错了一点。

您需要在付款前检查总收费是否大于0,或者如果总金额为0,则允许保存视频。

@video.save if @video.all_valid? && ((@total > 0 && @video.save_with_payment(@total)) || @total == 0)

此外,在您的 jQuery 代码中,您将整数与字符串进行比较。您可能想要:

$(document).ready(function() {
  var xyz = parseFloat($("span#total").text());

  if (xyz === 0.0){
    $("div#stripefields").hide();
  }
});

只是为了避免潜在的不一致。比较==将尝试强制类型,因此您可能会得到一些奇怪的结果。因此,通过使用 parseFloat 将总价格(整数或浮点数)转换为浮点值并与浮点数(0.0)进行比较,我们可以使结果非常清楚。

于 2012-08-15T16:49:30.877 回答