2016-05-08 44 views
1

我正在使用rails的條紋寶石,我試圖檢查用戶的優惠券代碼是否無效。如果代碼是無效的,那麼用戶會被重定向到users/show.html.haml檢查條紋優惠券是否無效

這裏是我的代碼

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的Stripe文檔,並沒有看到關於如何檢查代碼是否無效的任何信息。是否有另一種方法來檢查代碼是否等於或不等於nil

+0

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

回答

3

如果您傳遞給Stripe::Coupon.retrieve(...)的優惠券ID不存在,請求將失敗,並且會引發Stripe::InvalidRequestError異常。

因此,您不需要將結果與nil進行比較,而是需要將呼叫置於Stripe::Coupon.retrieve(...)的開始/救援/結束塊中以捕獲Stripe::InvalidRequestError異常。

你可以找到更多有關錯誤與條紋的API在這裏處理:https://stripe.com/docs/api#errors

1

有關背景資料見Ywain's answer
在Ruby中,

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