Rails / Stripe - 预订控制器中缺少模板错误

时间:2016-08-10 11:34:17

标签: ruby-on-rails ruby ruby-on-rails-4 stripe-payments

我正在使用Rails构建一个事件应用程序,而我正在尝试创建代码,该代码首先检查用户尝试预订时是否有空格,如果是,则将其用于预订事件。 我在尝试预订时遇到以下错误 -

缺少模板预订/创建

def find(*args)
  find_all(*args).first || raise(MissingTemplate.new(self, *args))
end

def find_all(path, prefixes = [], *args)

我不确定这与预订情况有什么关系,因为应该有空位。我认为这更多地与Stripe代码有关。这是相关代码 -

bookings_controller.rb

  class BookingsController < ApplicationController

before_action :authenticate_user!

def new
    # booking form
    # I need to find the event that we're making a booking on
    @event = Event.find(params[:event_id])
    # and because the event "has_many :bookings"
    @booking = @event.bookings.new
    # which person is booking the event?
    @booking.user = current_user
    #@booking.quantity = @booking.quantity
    #@total_amount = @booking_quantity.to_f * @event_price.to_f

end

def create
    # actually process the booking
    @event = Event.find(params[:event_id])
    @booking = @event.bookings.new(booking_params)
    @booking.user = current_user
    #@total_amount = @booking.quantity.to_f * @event.price.to_f

    Booking.transaction do
        @booking.save!
        @event.reload
        if @event.bookings.count > @event.number_of_spaces
            flash[:warning] = "Sorry, this event is fully booked."
            raise ActiveRecord::Rollback, "event is fully booked"
        else
            if @booking.save

                # CHARGE THE USER WHO'S BOOKED
                # #{} == puts a variable into a string
                Stripe::Charge.create(amount: @event.price_pennies, currency: "gbp",
                    card: @booking.stripe_token, description: "Booking number #{@booking.id}")

                flash[:success] = "Your place on our event has been booked"
                redirect_to event_path(@event)
            else
                flash[:error] = "Payment unsuccessful"
                render "new"
            end

            if @event.is_free?

                @booking.save!
                flash[:success] = "Your place on our event has been booked"
                redirect_to event_path(@event)
            end

        end 
    end


end


#def total_amount
    #@total_amount = @booking.quantity * @event.price
#end

private

def booking_params
    params.require(:booking).permit(:stripe_token, :quantity)
end



end

new.html.erb(预订) -

    <div class="col-md-6 col-md-offset-3" id="eventshow">
  <div class="row">
    <div class="panel panel-default">
        <div class="panel-heading">
            <h2>Confirm Your Booking</h2>
        </div>

            <div class="panel-body">    

                <p>Total Amount<%= @event.price %></p>
                <%= simple_form_for [@event, @booking], id: "new_booking" do |form| %>





                 <span class="payment-errors"></span>

                <div class="form-row">
                    <label>
                      <span>Card Number</span>
                      <input type="text" size="20" data-stripe="number"/>
                    </label>
                </div>

                <div class="form-row">
                  <label>
                  <span>CVC</span>
                  <input type="text" size="4" data-stripe="cvc"/>
                  </label>
                </div>

                <div class="form-row">
                    <label>
                        <span>Expiration (MM/YYYY)</span>
                        <input type="text" size="2" data-stripe="exp-month"/>
                    </label>
                    <span> / </span>
                    <input type="text" size="4" data-stripe="exp-year"/>
                </div>
            </div>
            <div class="panel-footer">    

               <%= form.button :submit %>


            </div> 

<% end %>
<% end %>

      </div>
  </div>
</div>    

<script type="text/javascript" src="https://js.stripe.com/v2/"></script>

<script type="text/javascript">
  Stripe.setPublishableKey('<%= STRIPE_PUBLIC_KEY %>');
  var stripeResponseHandler = function(status, response) {
    var $form = $('#new_booking');

    if (response.error) {
    // Show the errors on the form
    $form.find('.payment-errors').text(response.error.message);
    $form.find('input[type=submit]').prop('disabled', false);
    } else {
    // token contains id, last4, and card type
    var token = response.id;
    // Insert the token into the form so it gets submitted to the server
    $form.append($('<input type="hidden" name="booking[stripe_token]"     />').val(token));
    // and submit
    $form.get(0).submit();
    }
  };

  // jQuery(function($)  { - changed to the line below
  $(document).on("ready page:load", function () {

    $('#new_booking').submit(function(event) {
      var $form = $(this);

      // Disable the submit button to prevent repeated clicks
      $form.find('input[type=submit]').prop('disabled', true);

      Stripe.card.createToken($form, stripeResponseHandler);

      // Prevent the form from submitting with the default action
      return false;
    });
  });
</script>

1 个答案:

答案 0 :(得分:0)

您不应保存预订,然后检查计数。相反,你可以这样做。

val window = Window.partitionBy("uid").orderBy("time")
val change = ((lag("code", 1).over(window) <=> "c")).cast("int")