Rails 3 if с jQuery?

У меня есть многоэтапная форма Rails 3, которую я создал с помощью этого railscast: http://railscasts.com/episodes/217-multistep-forms, и я использовал другой railscast для реализации оплаты Stripe для своего приложения: http://railscasts.com/episodes/288-billing-with-stripe

В моем приложении форма оплаты скрыта через jQuery, если сумма, взимаемая с пользователя, равна 0.

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

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

Что я хочу сделать, так это сообщить своему приложению Rails, что поля оплаты Stripe не требуются для успешной отправки формы, если сумма, взимаемая с пользователя, равна 0. Итак, мне нужно изменить этот оператор в моем контроллере, чтобы отразить это :

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

@total - это сумма, взимаемая с пользователя, а save_with_payment - это начисление Stripe. Как лучше всего это сделать? Могу я как-нибудь добавить к этому утверждению еще одно «если»?


person user1429496    schedule 15.08.2012    source источник


Ответы (1)


Изменить: извините, я допустил небольшую опечатку.

Перед оплатой необходимо проверить, не превышает ли общая начисленная сумма 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), мы делаем результат довольно ясным.

person Robert K    schedule 15.08.2012
comment
@ user1429496 Я допустил небольшую опечатку. Еще раз проверьте исправность. - person Robert K; 15.08.2012