Im은 현재 한 컨트롤러의 매개 변수를 가져 와서 다음 컨트롤러에 추가하는 방법을 알 수 없습니다. Iv는 render
과 redirect_to
을 시도했는데 여전히 작동하지 않습니다.정의되지 않은 메소드 'total'for nil : NilClass NoMethodError in ReservationsController # checkout
Heres는 내 컨트롤러와 뷰 -보기의 형태는 -I 모두 체크 아웃에서 같은 reservation.id를 사용하여 컨트롤러를 만들려면 내 checkout controller
의 작용을 얻는다, 그래서 체크 아웃 컨트롤러에 reservation.total를 호출 할 수 있습니다.
컨트롤러를 만들면서 체크 아웃 컨트롤러를 통해 공유 할 수있는 방법은 무엇입니까?
오류 로그 :
NoMethodError (undefined method `total' for nil:NilClass):
app/controllers/reservations_controller.rb:45:in `checkout'
예약 컨트롤러 :
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 :
<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'
방금 PARAMS에 의해 예약을 발견 할 수없는 html.erb 왜 사용하지 않는 궁금? 체크 아웃 컨트롤러에? –
당신은 또한 @reviser에서 def in def를 작성했습니다 –
@reservation = Reservation.find (params [: id])는 다른 오류를 나타냅니다 : 'id'= –