我正在尝试设置Braintree。我有一个同时具有checkout
和create
方法的预留控制器。 checkout
方法包含braintree的代码,create
方法提交客户的文档和表单。
我要问的主要问题是如何将create
方法变量(如reservation
或reservation_id
)转移到checkout
方法?
我希望结帐能够保留当前的预订!!谢谢!!
错误日志:
NoMethodError (undefined method `total' for nil:NilClass):
app/controllers/reservations_controller.rb:36:in `checkout'
Reservations_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}"
redirect_to your_essays_path
elsif result.transaction
puts "Error processing transaction:"
puts " code: #{result.transaction.processor_response_code}"
puts " text: #{result.transaction.processor_response_text}"
redirect_to @reservation.reviser, alert: "Oops, something went wrong..."
else
p result.errors
end
render nothing: true
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
路线:
post 'checkout', to: 'reservations#checkout'
create.html.erb:
<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 = "<%= @token %>";
braintree.setup(clientToken, "dropin", {
container: "payment-form"
});
</script>