nil的未定义方法`total':NilClass(共享方法变量)

时间:2016-07-15 22:31:23

标签: javascript html ruby-on-rails ruby braintree

我正在尝试设置Braintree。我有一个同时具有checkoutcreate方法的预留控制器。 checkout方法包含braintree的代码,create方法提交客户的文档和表单。

我要问的主要问题是如何将create方法变量(如reservationreservation_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>

0 个答案:

没有答案