2016-05-08 9 views
1

Ich verwende das Stripe-Juwel für Schienen und ich versuche zu überprüfen, ob der Coupon-Code eines Benutzers ungültig ist. Wenn der Code ungültig ist, dann wird der Benutzer auf users/show.html.haml umgeleitetÜberprüfen, ob ein Stripe-Coupon ungültig ist

Hier ist mein Code

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

Ich dachte, dass Sie den Code aus Stripe Abrufen und Prüfen, ob der Wert nil funktionieren würde, aber der Fehler Nachricht, die ich bekomme ist:

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

Eine Idee, was hier vor sich geht? Ich habe die Stripe-Dokumentation für Ruby durchgesehen und keine Informationen darüber erhalten, wie überprüft werden kann, ob ein Code ungültig ist. Gibt es eine andere Möglichkeit zu überprüfen, ob ein Code gleich oder ungleich nil ist?

+0

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

Antwort

3

Wenn die Coupon-ID, die Sie an Stripe::Coupon.retrieve(...) übergeben, nicht existiert, schlägt die Anforderung fehl und es wird eine Stripe::InvalidRequestError Ausnahme ausgelöst.

Statt also das Ergebnis zu nil vergleichen, müssen Sie den Anruf Stripe::Coupon.retrieve(...) in einem begin/rescue/Endblock platzieren die Stripe::InvalidRequestError Ausnahme zu fangen.

Sie können mehr über Fehler erfahren, mit API-Streifen ist hier Handhabung: https://stripe.com/docs/api#errors

1

Für Hintergrundinformationen Ywain's answer und
in Ruby sehen,

# @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