【发布时间】:2017-02-03 04:20:33
【问题描述】:
我在尝试为我的 Rails 应用程序实施付款流程时遇到上述错误。这是完整的错误-
我尝试过 source: stripe_token 和 source: stripe_charge_id 但这些都不起作用。
这是我的预订模型中的内容 -
Booking.rb
class Booking < ActiveRecord::Base
belongs_to :event
belongs_to :user
validates :quantity, presence: true, numericality: { greater_than: 0 }
validates :event, presence: true, numericality: {greater_than_or_equal_to: 0 }
before_save :set_price_to_zero_if_free
def set_price_to_zero_if_free
self.event.price >= 1 unless self.event.is_free
end
def reserve
# Don't process this booking if it isn't valid
#if valid?
# We can always set this, even for free events because their price will be 0.
#self.total_amount = booking.quantity * event.price
# Free events don't need to do anything special
if event.is_free?
save!
# Paid events should charge the customer's card
else
begin
charge = Stripe::Charge.create(amount: total_amount, currency: "gbp", card: stripe_charge_id, description: "Booking number #{id}", items: [{quantity: quantity}])
self.stripe_charge_id = charge.id
save!
rescue Stripe::CardError => e
errors.add(:base, e.message)
false
end
end
end
end
还有我的控制器 -
bookings_controller.rb
class BookingsController < ApplicationController
before_action :authenticate_user!
def new
@event = Event.find(params[:event_id])
@booking = @event.bookings.new(quantity: params[:quantity])
@booking.user = current_user
end
def create
# actually process the booking
@event = Event.find(params[:event_id])
@booking = @event.bookings.new(booking_params)
@booking.user = current_user
if
@booking.reserve
flash[:success] = "Your place on our event has been booked"
redirect_to event_path(@event)
else
flash[:error] = "Booking unsuccessful"
render "new"
end
end
private
def booking_params
params.require(:booking).permit(:stripe_token, :quantity, :event_id, :stripe_charge_id)
end
end
我对此感到有些困惑,因此不胜感激。我现在尝试了各种选择,但没有得到任何结果。
【问题讨论】:
标签: ruby-on-rails ruby ruby-on-rails-4 model-view-controller stripe-payments