5

Stripe documentation on errors'u gözden geçirdim, ancak hala bu hataları düzgün bir şekilde işleme/yeniden yönlendirme konusunda sorun yaşıyorum. Temel olarak ne olursa olsun, (edit_profile_path aracılığıyla) edit eylemine geri dönmelerini ve bir mesaj göstermelerini (başarılı olsun ya da olmasın) istiyorum.Bir kerelik şarj için Şerit hatalarını ve istisnaları düzgün bir şekilde kullanmak

update eylemine POST'lar için edit eyleminde bir form var. Bu geçerli bir kredi kartı ile düzgün çalışıyor (şarj Stripe panosunda). Stripe.js'yi kullanıyorum. Şimdi redirect_to bir flaş mesajı geçebilir olsa

class ExtrasController < ApplicationController 

    def edit 
    @extras = current_user.extras 
    end 

    def update 

    Stripe.api_key = "hidden" 

    token = params[:stripeToken] 

    begin 
     charge = Stripe::Charge.create(
     :amount => 5000, # amount in cents 
     :currency => "usd", 
     :card => token, 
     :description => current_user.email 
    ) 
    rescue Stripe::CardError => e 
     # redirect_to edit_extras_path, notice: e.message 
     # What I'm trying to do, but obviously results in AbstractController::DoubleRenderError 
    rescue => e 
     # Something else happened, completely unrelated to Stripe 
     # Display a generic error message 
    end 

    redirect_to edit_extras_path, notice: "Card charged successfully." 
    end 

end 
+1

Bu mantığı bir şans elde ettiğinizde bir modele taşımanızı öneririm. – tommyd456

+0

Bunu yazdığından beri yaptım. Önerisi için teşekkürler. – gbdev

+0

İyi adam - Ben aslında herhangi bir modele uymadığını hissettiğimden, özel bir hizmet nesnesine benimkini taşıdım. – tommyd456

cevap

10

, ayrıca yine kendisi tarafından flaş manipüle edebilir.

def update 

    Stripe.api_key = "hidden" 

    token = params[:stripeToken] 

    begin 
    charge = Stripe::Charge.create(
     :amount => 5000, # amount in cents 
     :currency => "usd", 
     :card => token, 
     :description => current_user.email 
    ) 
    # No exceptions were raised; Set our success message. 
    flash[:notice] = 'Card charged successfully.' 
    rescue Stripe::CardError => e 
    # CardError; display an error message. 
    flash[:notice] = 'That card is presently on fire!' 
    rescue => e 
    # Some other error; display an error message. 
    flash[:notice] = 'Some error occurred.' 
    end 

    redirect_to edit_extras_path 
end 

bir alert için Hata durumundaki notice takas isteyebilirsiniz, kendi amaç mesajlarınız daha net yapmak için:

Yani güncelleme koduna küçük bir değişiklik istediğini yapalım veya error flaş tipi; Daha sonra bunları bir bakışta başarı veya başarısızlık göstermek için CSS ile kolayca stilleyebilirsiniz. (Bootstrap ve Foundation, örneğin, her biri çeşitli türlerdeki uyarıları görüntüleme stilleri sağlar.)

+0

Bu şekilde çok fazla görünüşe bakıyorum haha. Basit çözüm için teşekkür ederim. Ve evet, ben 'alert' vs 'uyarı' yanıp söner ile tam olarak yaptım. Şerefe! – gbdev

+0

Basit şeyleri gözden kaçırmak her zaman kolaydır! Yardım ettiğine sevindim. – colinm

İlgili konular