Ruby on rails 4 从费用控制员创建采购收据

Ruby on rails 4 从费用控制员创建采购收据,ruby-on-rails-4,stripe-payments,Ruby On Rails 4,Stripe Payments,我正在使用ChargesContoller的create方法创建一个新的购买。 我可以成功创建新购买并传递与费用相关的信息 我的问题是:如何获取采购订单id? 以下是“签出过程的工作原理”: 事件>选项>预订>订单“有许多预订”> 在Order show视图中,我有一个Stripe按钮,它创建了一个新的charge>redirect to Purchase 采购基本上是订单的收据。这就是为什么我要显示订单id和与订单关联的预订。我知道没有传递订单id,因为我可以在rails控制台中看到它 我应该

我正在使用ChargesContoller的create方法创建一个新的购买。 我可以成功创建新购买并传递与费用相关的信息

我的问题是:如何获取采购订单id?

以下是“签出过程的工作原理”: 事件>选项>预订>订单“有许多预订”> 在Order show视图中,我有一个Stripe按钮,它创建了一个新的charge>redirect to Purchase

采购基本上是订单的收据。这就是为什么我要显示订单id和与订单关联的预订。我知道没有传递订单id,因为我可以在rails控制台中看到它

我应该使用另一种类型的关联,比如have_many_和_belien_to_many? 也许是一张桌子

我正在阅读rails指南的这一部分,但我不确定我是否找对了地方:

或者可能是我试图将订单id“在费用创建中”传递给购买的方式:

  purchase = Purchase.create(customer_email: params[:stripeEmail], amount: params[:amount],
   customer_card: params[:stripeToken], order_id: params[:order_id], customer_id: customer.id)
订单型号:

class Order < ActiveRecord::Base
  belongs_to :order_status
  belongs_to :purchase
  has_many :reservations
  before_create :set_order_status
  before_create :create_unique_identifier
  before_save :total_for_no_price
  before_save :update_subtotal

  def to_param
     uuid
   end

  def subtotal
    reservations.collect{ |r| r.price }.sum
  end

  def total_for_no_price
    if self.subtotal.nil?
      self[:subtotal] = 0
    end
  end

   def create_unique_identifier
     self.uuid = SecureRandom.uuid
   end
private
  def set_order_status
    self.order_status_id = 1
  end

  def update_subtotal
    self[:subtotal] = subtotal
  end


end
class Purchase < ActiveRecord::Base
    has_many :orders
    has_many :reservations, through: :orders
end
class ChargesController < ApplicationController
    def new
    end

    def create
      # Amount in cents
      @order = Order.find_by_uuid(session[:order_id])
      @reservations = @order.reservations

      @amount = @order.subtotal.to_i * 100

      customer = Stripe::Customer.create(
        :email => params[:stripeEmail],
        :source  => params[:stripeToken]
      )

      charge = Stripe::Charge.create(
        :customer    => customer.id,
        :amount      => @amount,
        :description => @order.id,
        :currency    => 'usd'


      )

      purchase = Purchase.create(customer_email: params[:stripeEmail], amount: params[:amount],
       customer_card: params[:stripeToken], order_id: params[:order_id], customer_id: customer.id)



    if charge.save
        @order_id = @order.update_attributes(order_status_id: 2)
        #redirect_to @order
        redirect_to purchase
        reset_session

    end   

    rescue Stripe::CardError => e
      flash[:error] = e.message
      redirect_to new_charge_path
    end
end
class OrdersController < ApplicationController
  before_action :set_order, only: [:show, :edit, :update, :destroy]

  # GET /orders
  # GET /orders.json
  def index
    @orders = Order.all
  end

  # GET /orders/1
  # GET /orders/1.json
  def show
    @order = Order.find_by_uuid(params[:id])
    @reservations = @order.reservations
  end

  # GET /orders/new
  def new
    @order = Order.new
  end

  # GET /orders/1/edit
  def edit
  end

  # POST /orders
  # POST /orders.json
  def create
    @order = Order.new(order_params)

    respond_to do |format|
      if @order.save
        format.html { redirect_to @order, notice: 'Order was successfully created.' }
        format.json { render :show, status: :created, location: @order }
      else
        format.html { render :new }
        format.json { render json: @order.errors, status: :unprocessable_entity }
      end
    end
  end

  # PATCH/PUT /orders/1
  # PATCH/PUT /orders/1.json
  def update
    respond_to do |format|
      if @order.update(order_params)
        format.html { redirect_to @order, notice: 'Order was successfully updated.' }
        format.json { render :show, status: :ok, location: @order }
      else
        format.html { render :edit }
        format.json { render json: @order.errors, status: :unprocessable_entity }
      end
    end
  end

  # DELETE /orders/1
  # DELETE /orders/1.json
  def destroy
    @order.destroy
    respond_to do |format|
      format.html { redirect_to orders_url, notice: 'Order was successfully destroyed.' }
      format.json { head :no_content }
    end
  end

  private
    # Use callbacks to share common setup or constraints between actions.
    def set_order
      @order = Order.find_by_uuid(params[:id])
    end

    # Never trust parameters from the scary internet, only allow the white list through.
    def order_params
      params.require(:order).permit(:subtotal, :tax, :total, :order_status_id, :uuid)
    end
end
<div class="container-fluid events-container">
    <div class="row">
        <div class="col-sm-12">

            <h4>Your Registrations:</h4>
            <% @order.reservations.each do |reservation| %>
            <h4><%= reservation.name %> <%= reservation.lastname %> | <%= reservation.email %> | <%= reservation.phone %></h4>
            <h4><%= reservation.gender %> <%= reservation.shirt %> </h4> 
                <% unless  reservation.team === 'N/A' %>
                    <h4>Team: <%= reservation.team %></h4>
                <% end %>
                <% unless  reservation.redeemcode === 'N/A' %>
                    <h4>Redeem Code: <%= reservation.redeemcode %></h4>
                <% end %>
            <hr>                            
            <% end %>
            <h1>Order Total: <%= number_to_currency(@order.subtotal)%></h1>
            <% if @order.order_status_id === 1 %>
              <%= form_tag charges_path(@order) do %>
                <article>
                  <% if flash[:error].present? %>
                    <div id="error_explanation">
                      <p><%= flash[:error] %></p>
                    </div>
                  <% end %>
                </article>

                <script src="https://checkout.stripe.com/checkout.js" class="stripe-button"
                        data-key="<%= Rails.configuration.stripe[:publishable_key] %>"
                        data-description= "Event Registration(s)"
                        data-amount="<%= @order.subtotal.to_i * 100%>"
                        data-locale="auto">
                        </script>
              <% end %>

            <% end %>           
            <h3>Need to Modify you order? <%= link_to 'Back to Cart', cart_path %> </h3>

        </div>
    </div>
</div>
class ChargesController < ApplicationController
    def new
    end

    def create
      # Amount in cents
      @order = Order.find_by_uuid(session[:order_id])
      @reservations = @order.reservations

      @amount = @order.subtotal.to_i * 100

      customer = Stripe::Customer.create(
        :email => params[:stripeEmail],
        :source  => params[:stripeToken]
      )

      charge = Stripe::Charge.create(
        :customer    => customer.id,
        :amount      => @amount,
        :description => @order.id,
        :currency    => 'usd'


      )

      purchase = Purchase.create(customer_email: params[:stripeEmail], amount: params[:amount],
       customer_card: params[:stripeToken], order_id: (@order.id), customer_id: customer.id)



    if charge.save
        @order_id = @order.update_attributes(order_status_id: 2)
        #redirect_to @order
        redirect_to purchase
        reset_session

    end   

    rescue Stripe::CardError => e
      flash[:error] = e.message
      redirect_to new_charge_path
    end
end
类顺序
购买模式:

class Order < ActiveRecord::Base
  belongs_to :order_status
  belongs_to :purchase
  has_many :reservations
  before_create :set_order_status
  before_create :create_unique_identifier
  before_save :total_for_no_price
  before_save :update_subtotal

  def to_param
     uuid
   end

  def subtotal
    reservations.collect{ |r| r.price }.sum
  end

  def total_for_no_price
    if self.subtotal.nil?
      self[:subtotal] = 0
    end
  end

   def create_unique_identifier
     self.uuid = SecureRandom.uuid
   end
private
  def set_order_status
    self.order_status_id = 1
  end

  def update_subtotal
    self[:subtotal] = subtotal
  end


end
class Purchase < ActiveRecord::Base
    has_many :orders
    has_many :reservations, through: :orders
end
class ChargesController < ApplicationController
    def new
    end

    def create
      # Amount in cents
      @order = Order.find_by_uuid(session[:order_id])
      @reservations = @order.reservations

      @amount = @order.subtotal.to_i * 100

      customer = Stripe::Customer.create(
        :email => params[:stripeEmail],
        :source  => params[:stripeToken]
      )

      charge = Stripe::Charge.create(
        :customer    => customer.id,
        :amount      => @amount,
        :description => @order.id,
        :currency    => 'usd'


      )

      purchase = Purchase.create(customer_email: params[:stripeEmail], amount: params[:amount],
       customer_card: params[:stripeToken], order_id: params[:order_id], customer_id: customer.id)



    if charge.save
        @order_id = @order.update_attributes(order_status_id: 2)
        #redirect_to @order
        redirect_to purchase
        reset_session

    end   

    rescue Stripe::CardError => e
      flash[:error] = e.message
      redirect_to new_charge_path
    end
end
class OrdersController < ApplicationController
  before_action :set_order, only: [:show, :edit, :update, :destroy]

  # GET /orders
  # GET /orders.json
  def index
    @orders = Order.all
  end

  # GET /orders/1
  # GET /orders/1.json
  def show
    @order = Order.find_by_uuid(params[:id])
    @reservations = @order.reservations
  end

  # GET /orders/new
  def new
    @order = Order.new
  end

  # GET /orders/1/edit
  def edit
  end

  # POST /orders
  # POST /orders.json
  def create
    @order = Order.new(order_params)

    respond_to do |format|
      if @order.save
        format.html { redirect_to @order, notice: 'Order was successfully created.' }
        format.json { render :show, status: :created, location: @order }
      else
        format.html { render :new }
        format.json { render json: @order.errors, status: :unprocessable_entity }
      end
    end
  end

  # PATCH/PUT /orders/1
  # PATCH/PUT /orders/1.json
  def update
    respond_to do |format|
      if @order.update(order_params)
        format.html { redirect_to @order, notice: 'Order was successfully updated.' }
        format.json { render :show, status: :ok, location: @order }
      else
        format.html { render :edit }
        format.json { render json: @order.errors, status: :unprocessable_entity }
      end
    end
  end

  # DELETE /orders/1
  # DELETE /orders/1.json
  def destroy
    @order.destroy
    respond_to do |format|
      format.html { redirect_to orders_url, notice: 'Order was successfully destroyed.' }
      format.json { head :no_content }
    end
  end

  private
    # Use callbacks to share common setup or constraints between actions.
    def set_order
      @order = Order.find_by_uuid(params[:id])
    end

    # Never trust parameters from the scary internet, only allow the white list through.
    def order_params
      params.require(:order).permit(:subtotal, :tax, :total, :order_status_id, :uuid)
    end
end
<div class="container-fluid events-container">
    <div class="row">
        <div class="col-sm-12">

            <h4>Your Registrations:</h4>
            <% @order.reservations.each do |reservation| %>
            <h4><%= reservation.name %> <%= reservation.lastname %> | <%= reservation.email %> | <%= reservation.phone %></h4>
            <h4><%= reservation.gender %> <%= reservation.shirt %> </h4> 
                <% unless  reservation.team === 'N/A' %>
                    <h4>Team: <%= reservation.team %></h4>
                <% end %>
                <% unless  reservation.redeemcode === 'N/A' %>
                    <h4>Redeem Code: <%= reservation.redeemcode %></h4>
                <% end %>
            <hr>                            
            <% end %>
            <h1>Order Total: <%= number_to_currency(@order.subtotal)%></h1>
            <% if @order.order_status_id === 1 %>
              <%= form_tag charges_path(@order) do %>
                <article>
                  <% if flash[:error].present? %>
                    <div id="error_explanation">
                      <p><%= flash[:error] %></p>
                    </div>
                  <% end %>
                </article>

                <script src="https://checkout.stripe.com/checkout.js" class="stripe-button"
                        data-key="<%= Rails.configuration.stripe[:publishable_key] %>"
                        data-description= "Event Registration(s)"
                        data-amount="<%= @order.subtotal.to_i * 100%>"
                        data-locale="auto">
                        </script>
              <% end %>

            <% end %>           
            <h3>Need to Modify you order? <%= link_to 'Back to Cart', cart_path %> </h3>

        </div>
    </div>
</div>
class ChargesController < ApplicationController
    def new
    end

    def create
      # Amount in cents
      @order = Order.find_by_uuid(session[:order_id])
      @reservations = @order.reservations

      @amount = @order.subtotal.to_i * 100

      customer = Stripe::Customer.create(
        :email => params[:stripeEmail],
        :source  => params[:stripeToken]
      )

      charge = Stripe::Charge.create(
        :customer    => customer.id,
        :amount      => @amount,
        :description => @order.id,
        :currency    => 'usd'


      )

      purchase = Purchase.create(customer_email: params[:stripeEmail], amount: params[:amount],
       customer_card: params[:stripeToken], order_id: (@order.id), customer_id: customer.id)



    if charge.save
        @order_id = @order.update_attributes(order_status_id: 2)
        #redirect_to @order
        redirect_to purchase
        reset_session

    end   

    rescue Stripe::CardError => e
      flash[:error] = e.message
      redirect_to new_charge_path
    end
end
class-Purchase
收费控制器:

class Order < ActiveRecord::Base
  belongs_to :order_status
  belongs_to :purchase
  has_many :reservations
  before_create :set_order_status
  before_create :create_unique_identifier
  before_save :total_for_no_price
  before_save :update_subtotal

  def to_param
     uuid
   end

  def subtotal
    reservations.collect{ |r| r.price }.sum
  end

  def total_for_no_price
    if self.subtotal.nil?
      self[:subtotal] = 0
    end
  end

   def create_unique_identifier
     self.uuid = SecureRandom.uuid
   end
private
  def set_order_status
    self.order_status_id = 1
  end

  def update_subtotal
    self[:subtotal] = subtotal
  end


end
class Purchase < ActiveRecord::Base
    has_many :orders
    has_many :reservations, through: :orders
end
class ChargesController < ApplicationController
    def new
    end

    def create
      # Amount in cents
      @order = Order.find_by_uuid(session[:order_id])
      @reservations = @order.reservations

      @amount = @order.subtotal.to_i * 100

      customer = Stripe::Customer.create(
        :email => params[:stripeEmail],
        :source  => params[:stripeToken]
      )

      charge = Stripe::Charge.create(
        :customer    => customer.id,
        :amount      => @amount,
        :description => @order.id,
        :currency    => 'usd'


      )

      purchase = Purchase.create(customer_email: params[:stripeEmail], amount: params[:amount],
       customer_card: params[:stripeToken], order_id: params[:order_id], customer_id: customer.id)



    if charge.save
        @order_id = @order.update_attributes(order_status_id: 2)
        #redirect_to @order
        redirect_to purchase
        reset_session

    end   

    rescue Stripe::CardError => e
      flash[:error] = e.message
      redirect_to new_charge_path
    end
end
class OrdersController < ApplicationController
  before_action :set_order, only: [:show, :edit, :update, :destroy]

  # GET /orders
  # GET /orders.json
  def index
    @orders = Order.all
  end

  # GET /orders/1
  # GET /orders/1.json
  def show
    @order = Order.find_by_uuid(params[:id])
    @reservations = @order.reservations
  end

  # GET /orders/new
  def new
    @order = Order.new
  end

  # GET /orders/1/edit
  def edit
  end

  # POST /orders
  # POST /orders.json
  def create
    @order = Order.new(order_params)

    respond_to do |format|
      if @order.save
        format.html { redirect_to @order, notice: 'Order was successfully created.' }
        format.json { render :show, status: :created, location: @order }
      else
        format.html { render :new }
        format.json { render json: @order.errors, status: :unprocessable_entity }
      end
    end
  end

  # PATCH/PUT /orders/1
  # PATCH/PUT /orders/1.json
  def update
    respond_to do |format|
      if @order.update(order_params)
        format.html { redirect_to @order, notice: 'Order was successfully updated.' }
        format.json { render :show, status: :ok, location: @order }
      else
        format.html { render :edit }
        format.json { render json: @order.errors, status: :unprocessable_entity }
      end
    end
  end

  # DELETE /orders/1
  # DELETE /orders/1.json
  def destroy
    @order.destroy
    respond_to do |format|
      format.html { redirect_to orders_url, notice: 'Order was successfully destroyed.' }
      format.json { head :no_content }
    end
  end

  private
    # Use callbacks to share common setup or constraints between actions.
    def set_order
      @order = Order.find_by_uuid(params[:id])
    end

    # Never trust parameters from the scary internet, only allow the white list through.
    def order_params
      params.require(:order).permit(:subtotal, :tax, :total, :order_status_id, :uuid)
    end
end
<div class="container-fluid events-container">
    <div class="row">
        <div class="col-sm-12">

            <h4>Your Registrations:</h4>
            <% @order.reservations.each do |reservation| %>
            <h4><%= reservation.name %> <%= reservation.lastname %> | <%= reservation.email %> | <%= reservation.phone %></h4>
            <h4><%= reservation.gender %> <%= reservation.shirt %> </h4> 
                <% unless  reservation.team === 'N/A' %>
                    <h4>Team: <%= reservation.team %></h4>
                <% end %>
                <% unless  reservation.redeemcode === 'N/A' %>
                    <h4>Redeem Code: <%= reservation.redeemcode %></h4>
                <% end %>
            <hr>                            
            <% end %>
            <h1>Order Total: <%= number_to_currency(@order.subtotal)%></h1>
            <% if @order.order_status_id === 1 %>
              <%= form_tag charges_path(@order) do %>
                <article>
                  <% if flash[:error].present? %>
                    <div id="error_explanation">
                      <p><%= flash[:error] %></p>
                    </div>
                  <% end %>
                </article>

                <script src="https://checkout.stripe.com/checkout.js" class="stripe-button"
                        data-key="<%= Rails.configuration.stripe[:publishable_key] %>"
                        data-description= "Event Registration(s)"
                        data-amount="<%= @order.subtotal.to_i * 100%>"
                        data-locale="auto">
                        </script>
              <% end %>

            <% end %>           
            <h3>Need to Modify you order? <%= link_to 'Back to Cart', cart_path %> </h3>

        </div>
    </div>
</div>
class ChargesController < ApplicationController
    def new
    end

    def create
      # Amount in cents
      @order = Order.find_by_uuid(session[:order_id])
      @reservations = @order.reservations

      @amount = @order.subtotal.to_i * 100

      customer = Stripe::Customer.create(
        :email => params[:stripeEmail],
        :source  => params[:stripeToken]
      )

      charge = Stripe::Charge.create(
        :customer    => customer.id,
        :amount      => @amount,
        :description => @order.id,
        :currency    => 'usd'


      )

      purchase = Purchase.create(customer_email: params[:stripeEmail], amount: params[:amount],
       customer_card: params[:stripeToken], order_id: (@order.id), customer_id: customer.id)



    if charge.save
        @order_id = @order.update_attributes(order_status_id: 2)
        #redirect_to @order
        redirect_to purchase
        reset_session

    end   

    rescue Stripe::CardError => e
      flash[:error] = e.message
      redirect_to new_charge_path
    end
end
class ChargesControllerparams[:stripeEmail],
:source=>params[:stripeToken]
)
charge=Stripe::charge.create(
:customer=>customer.id,
:amount=>@amount,
:description=>@order.id,
:货币=>“美元”
)
purchase=purchase.create(客户\电子邮件:params[:stripeEmail],金额:params[:amount],
客户卡:参数[:stripeToken],订单号:参数[:订单号],客户号:customer.id)
如果收费,请保存
@订单号=@order.update\u属性(订单号状态号:2)
#将_重定向到@order
重新引导您购买
重置会话
结束
救援条带::CardError=>e
闪光[:错误]=e.message
重定向到新的充电路径
结束
结束
订单管理员:

class Order < ActiveRecord::Base
  belongs_to :order_status
  belongs_to :purchase
  has_many :reservations
  before_create :set_order_status
  before_create :create_unique_identifier
  before_save :total_for_no_price
  before_save :update_subtotal

  def to_param
     uuid
   end

  def subtotal
    reservations.collect{ |r| r.price }.sum
  end

  def total_for_no_price
    if self.subtotal.nil?
      self[:subtotal] = 0
    end
  end

   def create_unique_identifier
     self.uuid = SecureRandom.uuid
   end
private
  def set_order_status
    self.order_status_id = 1
  end

  def update_subtotal
    self[:subtotal] = subtotal
  end


end
class Purchase < ActiveRecord::Base
    has_many :orders
    has_many :reservations, through: :orders
end
class ChargesController < ApplicationController
    def new
    end

    def create
      # Amount in cents
      @order = Order.find_by_uuid(session[:order_id])
      @reservations = @order.reservations

      @amount = @order.subtotal.to_i * 100

      customer = Stripe::Customer.create(
        :email => params[:stripeEmail],
        :source  => params[:stripeToken]
      )

      charge = Stripe::Charge.create(
        :customer    => customer.id,
        :amount      => @amount,
        :description => @order.id,
        :currency    => 'usd'


      )

      purchase = Purchase.create(customer_email: params[:stripeEmail], amount: params[:amount],
       customer_card: params[:stripeToken], order_id: params[:order_id], customer_id: customer.id)



    if charge.save
        @order_id = @order.update_attributes(order_status_id: 2)
        #redirect_to @order
        redirect_to purchase
        reset_session

    end   

    rescue Stripe::CardError => e
      flash[:error] = e.message
      redirect_to new_charge_path
    end
end
class OrdersController < ApplicationController
  before_action :set_order, only: [:show, :edit, :update, :destroy]

  # GET /orders
  # GET /orders.json
  def index
    @orders = Order.all
  end

  # GET /orders/1
  # GET /orders/1.json
  def show
    @order = Order.find_by_uuid(params[:id])
    @reservations = @order.reservations
  end

  # GET /orders/new
  def new
    @order = Order.new
  end

  # GET /orders/1/edit
  def edit
  end

  # POST /orders
  # POST /orders.json
  def create
    @order = Order.new(order_params)

    respond_to do |format|
      if @order.save
        format.html { redirect_to @order, notice: 'Order was successfully created.' }
        format.json { render :show, status: :created, location: @order }
      else
        format.html { render :new }
        format.json { render json: @order.errors, status: :unprocessable_entity }
      end
    end
  end

  # PATCH/PUT /orders/1
  # PATCH/PUT /orders/1.json
  def update
    respond_to do |format|
      if @order.update(order_params)
        format.html { redirect_to @order, notice: 'Order was successfully updated.' }
        format.json { render :show, status: :ok, location: @order }
      else
        format.html { render :edit }
        format.json { render json: @order.errors, status: :unprocessable_entity }
      end
    end
  end

  # DELETE /orders/1
  # DELETE /orders/1.json
  def destroy
    @order.destroy
    respond_to do |format|
      format.html { redirect_to orders_url, notice: 'Order was successfully destroyed.' }
      format.json { head :no_content }
    end
  end

  private
    # Use callbacks to share common setup or constraints between actions.
    def set_order
      @order = Order.find_by_uuid(params[:id])
    end

    # Never trust parameters from the scary internet, only allow the white list through.
    def order_params
      params.require(:order).permit(:subtotal, :tax, :total, :order_status_id, :uuid)
    end
end
<div class="container-fluid events-container">
    <div class="row">
        <div class="col-sm-12">

            <h4>Your Registrations:</h4>
            <% @order.reservations.each do |reservation| %>
            <h4><%= reservation.name %> <%= reservation.lastname %> | <%= reservation.email %> | <%= reservation.phone %></h4>
            <h4><%= reservation.gender %> <%= reservation.shirt %> </h4> 
                <% unless  reservation.team === 'N/A' %>
                    <h4>Team: <%= reservation.team %></h4>
                <% end %>
                <% unless  reservation.redeemcode === 'N/A' %>
                    <h4>Redeem Code: <%= reservation.redeemcode %></h4>
                <% end %>
            <hr>                            
            <% end %>
            <h1>Order Total: <%= number_to_currency(@order.subtotal)%></h1>
            <% if @order.order_status_id === 1 %>
              <%= form_tag charges_path(@order) do %>
                <article>
                  <% if flash[:error].present? %>
                    <div id="error_explanation">
                      <p><%= flash[:error] %></p>
                    </div>
                  <% end %>
                </article>

                <script src="https://checkout.stripe.com/checkout.js" class="stripe-button"
                        data-key="<%= Rails.configuration.stripe[:publishable_key] %>"
                        data-description= "Event Registration(s)"
                        data-amount="<%= @order.subtotal.to_i * 100%>"
                        data-locale="auto">
                        </script>
              <% end %>

            <% end %>           
            <h3>Need to Modify you order? <%= link_to 'Back to Cart', cart_path %> </h3>

        </div>
    </div>
</div>
class ChargesController < ApplicationController
    def new
    end

    def create
      # Amount in cents
      @order = Order.find_by_uuid(session[:order_id])
      @reservations = @order.reservations

      @amount = @order.subtotal.to_i * 100

      customer = Stripe::Customer.create(
        :email => params[:stripeEmail],
        :source  => params[:stripeToken]
      )

      charge = Stripe::Charge.create(
        :customer    => customer.id,
        :amount      => @amount,
        :description => @order.id,
        :currency    => 'usd'


      )

      purchase = Purchase.create(customer_email: params[:stripeEmail], amount: params[:amount],
       customer_card: params[:stripeToken], order_id: (@order.id), customer_id: customer.id)



    if charge.save
        @order_id = @order.update_attributes(order_status_id: 2)
        #redirect_to @order
        redirect_to purchase
        reset_session

    end   

    rescue Stripe::CardError => e
      flash[:error] = e.message
      redirect_to new_charge_path
    end
end
class OrdersController
带有充电按钮的订单显示页面:

class Order < ActiveRecord::Base
  belongs_to :order_status
  belongs_to :purchase
  has_many :reservations
  before_create :set_order_status
  before_create :create_unique_identifier
  before_save :total_for_no_price
  before_save :update_subtotal

  def to_param
     uuid
   end

  def subtotal
    reservations.collect{ |r| r.price }.sum
  end

  def total_for_no_price
    if self.subtotal.nil?
      self[:subtotal] = 0
    end
  end

   def create_unique_identifier
     self.uuid = SecureRandom.uuid
   end
private
  def set_order_status
    self.order_status_id = 1
  end

  def update_subtotal
    self[:subtotal] = subtotal
  end


end
class Purchase < ActiveRecord::Base
    has_many :orders
    has_many :reservations, through: :orders
end
class ChargesController < ApplicationController
    def new
    end

    def create
      # Amount in cents
      @order = Order.find_by_uuid(session[:order_id])
      @reservations = @order.reservations

      @amount = @order.subtotal.to_i * 100

      customer = Stripe::Customer.create(
        :email => params[:stripeEmail],
        :source  => params[:stripeToken]
      )

      charge = Stripe::Charge.create(
        :customer    => customer.id,
        :amount      => @amount,
        :description => @order.id,
        :currency    => 'usd'


      )

      purchase = Purchase.create(customer_email: params[:stripeEmail], amount: params[:amount],
       customer_card: params[:stripeToken], order_id: params[:order_id], customer_id: customer.id)



    if charge.save
        @order_id = @order.update_attributes(order_status_id: 2)
        #redirect_to @order
        redirect_to purchase
        reset_session

    end   

    rescue Stripe::CardError => e
      flash[:error] = e.message
      redirect_to new_charge_path
    end
end
class OrdersController < ApplicationController
  before_action :set_order, only: [:show, :edit, :update, :destroy]

  # GET /orders
  # GET /orders.json
  def index
    @orders = Order.all
  end

  # GET /orders/1
  # GET /orders/1.json
  def show
    @order = Order.find_by_uuid(params[:id])
    @reservations = @order.reservations
  end

  # GET /orders/new
  def new
    @order = Order.new
  end

  # GET /orders/1/edit
  def edit
  end

  # POST /orders
  # POST /orders.json
  def create
    @order = Order.new(order_params)

    respond_to do |format|
      if @order.save
        format.html { redirect_to @order, notice: 'Order was successfully created.' }
        format.json { render :show, status: :created, location: @order }
      else
        format.html { render :new }
        format.json { render json: @order.errors, status: :unprocessable_entity }
      end
    end
  end

  # PATCH/PUT /orders/1
  # PATCH/PUT /orders/1.json
  def update
    respond_to do |format|
      if @order.update(order_params)
        format.html { redirect_to @order, notice: 'Order was successfully updated.' }
        format.json { render :show, status: :ok, location: @order }
      else
        format.html { render :edit }
        format.json { render json: @order.errors, status: :unprocessable_entity }
      end
    end
  end

  # DELETE /orders/1
  # DELETE /orders/1.json
  def destroy
    @order.destroy
    respond_to do |format|
      format.html { redirect_to orders_url, notice: 'Order was successfully destroyed.' }
      format.json { head :no_content }
    end
  end

  private
    # Use callbacks to share common setup or constraints between actions.
    def set_order
      @order = Order.find_by_uuid(params[:id])
    end

    # Never trust parameters from the scary internet, only allow the white list through.
    def order_params
      params.require(:order).permit(:subtotal, :tax, :total, :order_status_id, :uuid)
    end
end
<div class="container-fluid events-container">
    <div class="row">
        <div class="col-sm-12">

            <h4>Your Registrations:</h4>
            <% @order.reservations.each do |reservation| %>
            <h4><%= reservation.name %> <%= reservation.lastname %> | <%= reservation.email %> | <%= reservation.phone %></h4>
            <h4><%= reservation.gender %> <%= reservation.shirt %> </h4> 
                <% unless  reservation.team === 'N/A' %>
                    <h4>Team: <%= reservation.team %></h4>
                <% end %>
                <% unless  reservation.redeemcode === 'N/A' %>
                    <h4>Redeem Code: <%= reservation.redeemcode %></h4>
                <% end %>
            <hr>                            
            <% end %>
            <h1>Order Total: <%= number_to_currency(@order.subtotal)%></h1>
            <% if @order.order_status_id === 1 %>
              <%= form_tag charges_path(@order) do %>
                <article>
                  <% if flash[:error].present? %>
                    <div id="error_explanation">
                      <p><%= flash[:error] %></p>
                    </div>
                  <% end %>
                </article>

                <script src="https://checkout.stripe.com/checkout.js" class="stripe-button"
                        data-key="<%= Rails.configuration.stripe[:publishable_key] %>"
                        data-description= "Event Registration(s)"
                        data-amount="<%= @order.subtotal.to_i * 100%>"
                        data-locale="auto">
                        </script>
              <% end %>

            <% end %>           
            <h3>Need to Modify you order? <%= link_to 'Back to Cart', cart_path %> </h3>

        </div>
    </div>
</div>
class ChargesController < ApplicationController
    def new
    end

    def create
      # Amount in cents
      @order = Order.find_by_uuid(session[:order_id])
      @reservations = @order.reservations

      @amount = @order.subtotal.to_i * 100

      customer = Stripe::Customer.create(
        :email => params[:stripeEmail],
        :source  => params[:stripeToken]
      )

      charge = Stripe::Charge.create(
        :customer    => customer.id,
        :amount      => @amount,
        :description => @order.id,
        :currency    => 'usd'


      )

      purchase = Purchase.create(customer_email: params[:stripeEmail], amount: params[:amount],
       customer_card: params[:stripeToken], order_id: (@order.id), customer_id: customer.id)



    if charge.save
        @order_id = @order.update_attributes(order_status_id: 2)
        #redirect_to @order
        redirect_to purchase
        reset_session

    end   

    rescue Stripe::CardError => e
      flash[:error] = e.message
      redirect_to new_charge_path
    end
end

您的注册:
|  | 
小组:
兑换代码:

订单总数:

需要修改您的订单吗?
我通过更改以下内容来解决此问题: 订单id:params[:订单id]订单id:(@order.id) 在费用控制器中

更新的费用控制器:

class Order < ActiveRecord::Base
  belongs_to :order_status
  belongs_to :purchase
  has_many :reservations
  before_create :set_order_status
  before_create :create_unique_identifier
  before_save :total_for_no_price
  before_save :update_subtotal

  def to_param
     uuid
   end

  def subtotal
    reservations.collect{ |r| r.price }.sum
  end

  def total_for_no_price
    if self.subtotal.nil?
      self[:subtotal] = 0
    end
  end

   def create_unique_identifier
     self.uuid = SecureRandom.uuid
   end
private
  def set_order_status
    self.order_status_id = 1
  end

  def update_subtotal
    self[:subtotal] = subtotal
  end


end
class Purchase < ActiveRecord::Base
    has_many :orders
    has_many :reservations, through: :orders
end
class ChargesController < ApplicationController
    def new
    end

    def create
      # Amount in cents
      @order = Order.find_by_uuid(session[:order_id])
      @reservations = @order.reservations

      @amount = @order.subtotal.to_i * 100

      customer = Stripe::Customer.create(
        :email => params[:stripeEmail],
        :source  => params[:stripeToken]
      )

      charge = Stripe::Charge.create(
        :customer    => customer.id,
        :amount      => @amount,
        :description => @order.id,
        :currency    => 'usd'


      )

      purchase = Purchase.create(customer_email: params[:stripeEmail], amount: params[:amount],
       customer_card: params[:stripeToken], order_id: params[:order_id], customer_id: customer.id)



    if charge.save
        @order_id = @order.update_attributes(order_status_id: 2)
        #redirect_to @order
        redirect_to purchase
        reset_session

    end   

    rescue Stripe::CardError => e
      flash[:error] = e.message
      redirect_to new_charge_path
    end
end
class OrdersController < ApplicationController
  before_action :set_order, only: [:show, :edit, :update, :destroy]

  # GET /orders
  # GET /orders.json
  def index
    @orders = Order.all
  end

  # GET /orders/1
  # GET /orders/1.json
  def show
    @order = Order.find_by_uuid(params[:id])
    @reservations = @order.reservations
  end

  # GET /orders/new
  def new
    @order = Order.new
  end

  # GET /orders/1/edit
  def edit
  end

  # POST /orders
  # POST /orders.json
  def create
    @order = Order.new(order_params)

    respond_to do |format|
      if @order.save
        format.html { redirect_to @order, notice: 'Order was successfully created.' }
        format.json { render :show, status: :created, location: @order }
      else
        format.html { render :new }
        format.json { render json: @order.errors, status: :unprocessable_entity }
      end
    end
  end

  # PATCH/PUT /orders/1
  # PATCH/PUT /orders/1.json
  def update
    respond_to do |format|
      if @order.update(order_params)
        format.html { redirect_to @order, notice: 'Order was successfully updated.' }
        format.json { render :show, status: :ok, location: @order }
      else
        format.html { render :edit }
        format.json { render json: @order.errors, status: :unprocessable_entity }
      end
    end
  end

  # DELETE /orders/1
  # DELETE /orders/1.json
  def destroy
    @order.destroy
    respond_to do |format|
      format.html { redirect_to orders_url, notice: 'Order was successfully destroyed.' }
      format.json { head :no_content }
    end
  end

  private
    # Use callbacks to share common setup or constraints between actions.
    def set_order
      @order = Order.find_by_uuid(params[:id])
    end

    # Never trust parameters from the scary internet, only allow the white list through.
    def order_params
      params.require(:order).permit(:subtotal, :tax, :total, :order_status_id, :uuid)
    end
end
<div class="container-fluid events-container">
    <div class="row">
        <div class="col-sm-12">

            <h4>Your Registrations:</h4>
            <% @order.reservations.each do |reservation| %>
            <h4><%= reservation.name %> <%= reservation.lastname %> | <%= reservation.email %> | <%= reservation.phone %></h4>
            <h4><%= reservation.gender %> <%= reservation.shirt %> </h4> 
                <% unless  reservation.team === 'N/A' %>
                    <h4>Team: <%= reservation.team %></h4>
                <% end %>
                <% unless  reservation.redeemcode === 'N/A' %>
                    <h4>Redeem Code: <%= reservation.redeemcode %></h4>
                <% end %>
            <hr>                            
            <% end %>
            <h1>Order Total: <%= number_to_currency(@order.subtotal)%></h1>
            <% if @order.order_status_id === 1 %>
              <%= form_tag charges_path(@order) do %>
                <article>
                  <% if flash[:error].present? %>
                    <div id="error_explanation">
                      <p><%= flash[:error] %></p>
                    </div>
                  <% end %>
                </article>

                <script src="https://checkout.stripe.com/checkout.js" class="stripe-button"
                        data-key="<%= Rails.configuration.stripe[:publishable_key] %>"
                        data-description= "Event Registration(s)"
                        data-amount="<%= @order.subtotal.to_i * 100%>"
                        data-locale="auto">
                        </script>
              <% end %>

            <% end %>           
            <h3>Need to Modify you order? <%= link_to 'Back to Cart', cart_path %> </h3>

        </div>
    </div>
</div>
class ChargesController < ApplicationController
    def new
    end

    def create
      # Amount in cents
      @order = Order.find_by_uuid(session[:order_id])
      @reservations = @order.reservations

      @amount = @order.subtotal.to_i * 100

      customer = Stripe::Customer.create(
        :email => params[:stripeEmail],
        :source  => params[:stripeToken]
      )

      charge = Stripe::Charge.create(
        :customer    => customer.id,
        :amount      => @amount,
        :description => @order.id,
        :currency    => 'usd'


      )

      purchase = Purchase.create(customer_email: params[:stripeEmail], amount: params[:amount],
       customer_card: params[:stripeToken], order_id: (@order.id), customer_id: customer.id)



    if charge.save
        @order_id = @order.update_attributes(order_status_id: 2)
        #redirect_to @order
        redirect_to purchase
        reset_session

    end   

    rescue Stripe::CardError => e
      flash[:error] = e.message
      redirect_to new_charge_path
    end
end
class ChargesController