Использование Stripe и хотите: 1. проверить соответствие модели 2. Если ошибок не было, проверьте маркер карты. 3. Если карта работает, сохраните новую запись.Проверка валидации перед сохранением рельсов
Ниже у меня есть он, где он сначала обрабатывает карту, а затем в случае успеха сохраняет запись. К сожалению, эта запись может завершиться неудачей, но карта уже была заряжена.
В качестве взлома у меня есть проверка js (которая отражает валидацию модели) в представлении, которое не позволяет отправить форму до тех пор, пока условия не будут выполнены.
Tourregistration.rb Контроллер
def create
token = params[:tourregistration][:stripeToken]
begin
charge = Stripe::Charge.create(
:amount => (params[:tourregistration][:invoice].to_d*100).round,
:currency => "usd",
:source => token,
:description => "Example charge"
)
rescue Stripe::CardError => e
# The card has been declined
redirect_to :back, :notice => "#{e}"
else
@tourregistrations = tourregistration_data.map do |tourregistration_params|
Tourregistration.new(tourregistration_params)
end
@tourregistrations.each(&:save)
if @tourregistrations.all?(&:valid?)
flash[:notice] = 'Sign-up Complete'
redirect_to root_url
else
redirect_to :back, :notice => "Something went wrong. Please fill in all fields."
end
end
конец
Tourregistration.rb Модель
class Tourregistration < ActiveRecord::Base
belongs_to :patron
belongs_to :tour
has_one :referrer
validates :fname, length: { minimum: 2}
validates :lname, length: { minimum: 2}
validates :email, presence: true
validates :price, presence: true
validates :invoice, presence: true
validates :patron_id, presence: true
validates :tour_id, presence: true
end