2016-06-29 15 views
0

Hallo, ich versuche mich auf meine braintree Konto zu erhalten Fehler angezeigt wird, wenn eine Transaktion zu schaffen, aber es scheint nichtAnzeige braintree Fehler auf scheitern

- flash.each do |key, value| 
       %div{:class => "alert alert-#{key}"}= value 


def update 
    result = Braintree::Transaction.sale(
     :amount => params[:amount_to_add].to_f, 
     # :order_id => "order id", 
     :customer_id => customer.customer_cim_id, 
     :tax_amount => (params[:amount_to_add].to_f/11).round(2), 
     :options => { 
      :submit_for_settlement => true 
     } 

    ) 
    if result.success? 
     logger.info "Added to #{params[:amount_to_add].to_f} to #{customer.first_name} #{customer.last_name} (#{customer.customer_cim_id})" 
     customer.store_credit.add_credit(params[:amount_to_add].to_f) 
     redirect_to myaccount_store_credit_path 
     # , :notice => "Successfully updated store credit." 
    else 
     result.errors.each do |error| 
     puts error.message 
     customer.errors.add(:base, error.message) 
     render :show, :notice => error.message 
     end 
    end 
    end 
+0

Ich bekomme die Antwort in meinem Terminal, aber ich versuche herauszufinden, wie diese Fehler zurück zu der Ansicht –

+0

Dies ist nicht wirklich meine Frage beantworten, ich möchte nur den Fehler, dass Braintree gibt mir die Präsentationsschicht zurückgeben –

+0

nicht sicher, ob Sie verfolgen, was ich tatsächlich brauche, warum die Fehler nicht auf der Präsentationsebene serviert werden wie sie sollten –

Antwort

0

ich den Grund, warum Sie sind wahrscheinlich nicht in der Lage glauben arbeiten werden, um sehen Sie die Fehler ist wegen der :notice Option auf Ihrem render-Methode, die redundant ist, weil render scheint nicht mit der :notice Option, nur redirect_to. Sie können die Fehler nur zu Ihrem flash hinzufügen, aber beachten Sie, dass Sie in Ihrer Ansicht die Fehler innerhalb des Flashs durchlaufen müssen, um es zu rendern.

Eine andere Möglichkeit, ich denke, dass Sie dies aber tun, ist die Zahlungsmethode zu Ihrem User-Modell aus Ihrer Sicht

class User|Customer 
    ... 

    def process_braintree_payment(amount) 
    result = Braintree::Transaction.sale(
     :amount => amount.to_f, 
     # :order_id => "order id", 
     :customer_id => customer_cim_id, 
     :tax_amount => (amount.to_f/11).round(2), 
     :options => { 
      :submit_for_settlement => true 
     } 
    ) 
    add_braintree_errors(result.error) unless result.success? 
    end 

    def add_braintree_errors(error_object) 
    error_object.each do |error| 
     errors.add(:braintree, error.message) 
    end 
    end 
end 

class XController 
    def update 
    @customer.process_braintree_payment(params[:amount_to_add]) 
    if @customer.errors.empty? 
     logger.info "Added to #{params[:amount_to_add].to_f} to #{@customer.first_name} #{@customer.last_name} (#{@customer.customer_cim_id})" 
     @customer.store_credit.add_credit(params[:amount_to_add].to_f) 
     redirect_to myaccount_store_credit_path 
     # , :notice => "Successfully updated store credit." 
    else 
     render :show 
    end 
    end 
end 

hinzuzufügen, haben Sie Zugriff auf die @customer Variable oder besser könnten Sie speichern das Fehlerobjekt in Die ActionController#flash, beachten Sie jedoch, mit den gleichen Tasten für Ihre Flash-Nachrichten, überschreiben den vorherigen Wert.

+0

denke, das ist auf der richtigen Spur, obwohl die process_braintree_payment mir undefined Methode –

+0

Wo bekommen Sie dieser Fehler? Meine Annahme war, dass Sie die '@ customer'-Variable gesetzt hatten, sonst würden Sie versuchen, die Methode auf einem Null-Objekt – oreoluwa

+0

aufzurufen, das ist alles in meiner Filiale Kredit-Controller/Modell mit einer benutzerdefinierten Methode für Kunden' def Kunden getan @customer || = User.includes (: store_credit) .find (current_user.id) Ende' –