2016-07-16 18 views
0

Ich bin derzeit nicht in der Lage herauszufinden, wie man Parameter von einem Controller zum nächsten Controller hinzufügen. Iv versuchte render und redirect_to und ich kann immer noch nicht zur Arbeit !!undefined Methode `total 'für nil: NilClass NoMethodError in ReservationsController # checkout

Heres mein Controller und Ansicht - Form im Hinblick wird die Wirkung meiner checkout controller -Ich will die gleiche reservation.id sowohl in der Kasse verwenden und Controller erstellen, so kann ich reservation.total in der Kasse Controller aufrufen.

Wie kann ich die Summe auf create Controller zu hoffen und über die Kasse zu teilen ??

Fehlerprotokoll:

NoMethodError (undefined method `total' for nil:NilClass): 
    app/controllers/reservations_controller.rb:45:in `checkout' 

Reservierungen Controller:

def checkout 




nonce = params[:payment_method_nonce] 
result = Braintree::Transaction.sale(
    :amount => @reservation.total, 
    :payment_method_nonce => nonce, 
    :options => { 
    :submit_for_settlement => true 
    } 
) 
if result.success? 
    puts "success!: #{result.transaction.id}" 
elsif result.transaction 
    puts "Error processing transaction:" 
    puts "code: #{result.transaction.processor_response_code}" 
    puts "text: #{result.transaction.processor_response_text}" 
else 
    p result.errors 
end 


end 



def create 

#!/usr/bin/env ruby 


    reviser = Reviser.find(params[:reviser_id]) 
     @reservation = current_user.reservations.create(reservation_params) 

     if @reservation.total > 0 

      @token = Braintree::ClientToken.generate 


     elsif @reservation.total == 0 
      @reservation.update_attributes status: true 
      redirect_to @reservation.reviser.user, alert: "Writing Request Success" 


     else 
      redirect_to @reservation.reviser, alert: "Oops, something went wrong..." 
     end 




    end 

erstellen html:

<p>create</p> 
 

 

 
<form id="checkout" method="post" action="/checkout"> 
 
    <div id="payment-form"></div> 
 
    <input type="submit" value="Pay"> 
 
</form> 
 

 
<script src="https://js.braintreegateway.com/js/braintree-2.26.0.min.js"></script> 
 
<script> 
 
// We generated a client token for you so you can test out this code 
 
// immediately. In a production-ready integration, you will need to 
 
// generate a client token on your server (see section below). 
 
// var clientToken = "eyJ2ZXJzaW9uIjoyLCJhdXRob3JpemF0aW9uRmluZ2VycHJpbnQiOiI5OGRjMDcyZDFmM2IwNzdlNmI2YmE1NTQ0ZDIxYzQ4YjliZmZlZDA3YmZhNTgxYzRkMTU4MzU2MWIyMjIxYzJlfGNyZWF0ZWRfYXQ9MjAxNi0wNy0xNVQwNjo0OTo0MS4zMTczNjM3NDArMDAwMFx1MDAyNm1lcmNoYW50X2lkPTM0OHBrOWNnZjNiZ3l3MmJcdTAwMjZwdWJsaWNfa2V5PTJuMjQ3ZHY4OWJxOXZtcHIiLCJjb25maWdVcmwiOiJodHRwczovL2FwaS5zYW5kYm94LmJyYWludHJlZWdhdGV3YXkuY29tOjQ0My9tZXJjaGFudHMvMzQ4cGs5Y2dmM2JneXcyYi9jbGllbnRfYXBpL3YxL2NvbmZpZ3VyYXRpb24iLCJjaGFsbGVuZ2VzIjpbXSwiZW52aXJvbm1lbnQiOiJzYW5kYm94IiwiY2xpZW50QXBpVXJsIjoiaHR0cHM6Ly9hcGkuc2FuZGJveC5icmFpbnRyZWVnYXRld2F5LmNvbTo0NDMvbWVyY2hhbnRzLzM0OHBrOWNnZjNiZ3l3MmIvY2xpZW50X2FwaSIsImFzc2V0c1VybCI6Imh0dHBzOi8vYXNzZXRzLmJyYWludHJlZWdhdGV3YXkuY29tIiwiYXV0aFVybCI6Imh0dHBzOi8vYXV0aC52ZW5tby5zYW5kYm94LmJyYWludHJlZWdhdGV3YXkuY29tIiwiYW5hbHl0aWNzIjp7InVybCI6Imh0dHBzOi8vY2xpZW50LWFuYWx5dGljcy5zYW5kYm94LmJyYWludHJlZWdhdGV3YXkuY29tLzM0OHBrOWNnZjNiZ3l3MmIifSwidGhyZWVEU2VjdXJlRW5hYmxlZCI6dHJ1ZSwicGF5cGFsRW5hYmxlZCI6dHJ1ZSwicGF5cGFsIjp7ImRpc3BsYXlOYW1lIjoiQWNtZSBXaWRnZXRzLCBMdGQuIChTYW5kYm94KSIsImNsaWVudElkIjpudWxsLCJwcml2YWN5VXJsIjoiaHR0cDovL2V4YW1wbGUuY29tL3BwIiwidXNlckFncmVlbWVudFVybCI6Imh0dHA6Ly9leGFtcGxlLmNvbS90b3MiLCJiYXNlVXJsIjoiaHR0cHM6Ly9hc3NldHMuYnJhaW50cmVlZ2F0ZXdheS5jb20iLCJhc3NldHNVcmwiOiJodHRwczovL2NoZWNrb3V0LnBheXBhbC5jb20iLCJkaXJlY3RCYXNlVXJsIjpudWxsLCJhbGxvd0h0dHAiOnRydWUsImVudmlyb25tZW50Tm9OZXR3b3JrIjp0cnVlLCJlbnZpcm9ubWVudCI6Im9mZmxpbmUiLCJ1bnZldHRlZE1lcmNoYW50IjpmYWxzZSwiYnJhaW50cmVlQ2xpZW50SWQiOiJtYXN0ZXJjbGllbnQzIiwiYmlsbGluZ0FncmVlbWVudHNFbmFibGVkIjp0cnVlLCJtZXJjaGFudEFjY291bnRJZCI6ImFjbWV3aWRnZXRzbHRkc2FuZGJveCIsImN1cnJlbmN5SXNvQ29kZSI6IlVTRCJ9LCJjb2luYmFzZUVuYWJsZWQiOmZhbHNlLCJtZXJjaGFudElkIjoiMzQ4cGs5Y2dmM2JneXcyYiIsInZlbm1vIjoib2ZmIn0="; 
 

 

 

 
var clientToken = "<%= @token %>"; 
 

 
braintree.setup(clientToken, "dropin", { 
 
    container: "payment-form" 
 
}); 
 
</script>

post 'checkout', to: 'reservations#checkout' 
get 'checkout', to: 'reservations#checkout' 
+0

Kann nicht Sie finden nur Reservierung von params: id? in der Kasse? –

+0

Sie vermissen auch @ in @reviser in def erstellen –

+0

@reservation = Reservation.find (params [: ID]) gibt mir einen anderen Fehler: Konnte nicht finden Reservierung mit 'ID' = –

Antwort

0

Ich empfehle Ihnen, die Checkout-Methode als Mitglied Methode, d. H. Übergeben Sie die ID der Reservierung in der URL.

post 'checkout/:id', to: 'reservations#checkout', :as => 'reservation_checkout' 

Dadurch können Sie die Reservierung wie finden.

@reservation = Reservation.find(params[:id]) #so you will not get the error undefined method `total' for nil:NilClass 

Ich frage mich, warum Sie nicht verwenden html.erb

<%= form_tag reservation_checkout_path(@reservation) %> 
    #your fields 
<% end %> 
+0

Ich habe versucht, das Formular-Tag und es schien zu gehen mit "Post" Reservierungen/Checkout ", zu:" Reservierungen # checkout'' aber die ID würde immer noch nicht gelöst werden. Ich habe die anderen ausprobiert und sie arbeiten auch nicht. Ich bekomme keine Reservierung mit 'ID' = ...... wenn ich die Checkout /: ID benutze ... Wenn ich den reservation_checkout_Pfad mache, hat die URL die ID nach dem Checkout. so: http: // localhost: 3000/reservations/checkout.338 –

+0

Ich denke, dass Sie zuerst mit der Schiene Anleitung Tutorial gehen müssen http://guides.rubyonrails.org/getting_started.html#creating-a- New-Rails-Projekt, das auf jeden Fall Konzepte über Routing und alles klar wird. hoffe, dass Hilfe! – power

Verwandte Themen