2016-05-08 5 views
1

Я использую стробирующий жемчуг для рельсов, и я пытаюсь проверить, является ли код купона пользователя недействительным. Если код недействителен, то пользователь перенаправляется на users/show.html.hamlПроверка того, что Stripe Coupon недействителен

Вот мой код

if Stripe::Coupon.retrieve(current_user.coupon_code) == nil 
    redirect_to user_path(current_user) 
end 

Я думал, что получение кода с полоской и проверки, является ли или нет значение nil будет работать, но ошибка я получаю:

Stripe::InvalidRequestError in SubscribersController#new 
No such coupon: *Whatever the invalid coupon name is (ex. "ASDF")* 

Любая идея относительно того, что здесь происходит? Я просмотрел документацию по Ruby для Ruby и не видел никакой информации о том, как проверить, недействителен ли код. Есть ли другой способ проверить, равен или нет код nil?

+0

https://stripe.com/docs/api #errors –

ответ

3

Если идентификатор купон, который вы передаете, Stripe::Coupon.retrieve(...) не существует, запрос не будет выполнен, и будет произведено исключение Stripe::InvalidRequestError.

Таким образом, вместо того, сравнивая результат с nil, вам необходимо поместить вызов Stripe::Coupon.retrieve(...) в начать/спасение/конечный блок, чтобы поймать Stripe::InvalidRequestError исключения.

Вы можете узнать больше об обработке с API Stripe здесь ошибка: https://stripe.com/docs/api#errors

1

Справочную информацию см Ywain's answer и
В рубина,

# @return [Boolean] 
    # # 
    def is_valid?(coupon) 
    return false unless coupon.present? 

    coupon_retrieved = Stripe::Coupon.retrieve(coupon) 
    coupon_retrieved.valid == true 

    rescue => error 
    puts "#{error.class} :: #{error.message}" 
    false 
    end