2016-07-16 10 views
0

現在、スタックされているImは、1つのコントローラーから次のコントローラーに追加するパラメーターを取得する方法を見つけることができません。 Ivはrenderredirect_toを試しましたが、私はまだこれがうまく動作しません!未定義メソッド `total 'for nil:NilClass NoMethodError in ReservationsController#checkout

相続人は私のコントローラとビュー - ビューでフォームは-Iは、両方のチェックアウトで同じreservation.idを使用してコントローラを作成したい私のcheckout controller のアクションを取得しますので、私はチェックアウトのコントローラでreservation.totalを呼び出すことができます。

どのようにして、コントローラの合計を計算し、チェックアウトコントローラで共有することができますか?

エラーログ:

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

予約コントローラ:

<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' 
0123:

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 

HTMLを作成します

+0

は、あなただけのparamsによって予約を見つけることができませんhtml.erbなぜあなたは使用していない疑問に思って?チェックアウトコントローラで? –

+0

また、@reviserの@defineで@が見つからない場合もあります。 –

+0

@reservation = Reservation.find(params [:id])は私に別のエラーを表示します: 'id' = –

答えて

0

チェックアウト方法をメンバーメソッドとして、つまりURL内の予約のIDを渡すことをお勧めします。

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

このようにすると、次のような予約を見つけることができます。 ID:

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

私は

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

私はフォームタグを試しましたが、 'post 'reservations/checkout'を使って 'reservations#checkout''を行ったようですが、まだIDは解決されませんでした。私は他の人を試してみて、どちらも働いていません。私は予約を見つけることができませんでした 'id' = ...私はチェックアウトを使用するとき:/ id ...私はreservation_checkout_pathをするとき、チェックアウトの後にIDを持っています。 http:// localhost:3000/reservations/checkout.338 –

+0

最初にレールガイドのチュートリアルを参照する必要があると思っています。http://guides.rubyonrails.org/getting_started.html#creating-a- new-rails-projectは、ルーティングとすべてについての概念を明確にします。助けて欲しい! – power

関連する問題