Я создаю сайт событий с использованием Rails, и я не уверен, что моя база данных захватывает заказы по мере их возникновения. Я все еще в режиме разработки, поэтому любые заказы являются чисто «макетными» для демонстрационных целей. Как проверить, записываются ли они (я уверен, что это не так), а если нет - как я могу это исправить?Rails - сохранение заказов в базе данных
Вот соответствующий код, как вещи стоят -
booking.rb
class Booking < ActiveRecord::Base
belongs_to :event
belongs_to :user
end
bookings_controller.rb
class BookingsController < ApplicationController
before_action :authenticate_user!
def new
@event = Event.find(params[:event_id])
@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
if @booking.save
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?
flash[:success] = "Your place on our event has been booked"
redirect_to event_path(@event)
end
end
private
def booking_params
params.require(:booking).permit(:stripe_token, :quantity)
end
end
schema.rb
create_table "bookings", force: :cascade do |t|
t.integer "event_id"
t.integer "user_id"
t.string "stripe_token"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "quantity"
Нужно ли мне добавить ab ooking_id в таблицу заказов?
Большое спасибо. Да, я использовал миграцию. Идентификатор бронирования был бы полезен, тем не менее, чтобы предоставить людям, когда они заказывают события? –
Затем назовите его 'booking_number', поскольку ваше фактическое сообщение вызывает его. Это предотвратит путаницу между техническими идентификаторами и токенами, ориентированными на пользователя. –
Я согласен, существует 'booking_id', но пользователи не должны знать ваши внутренние приложения, номер' booking_number' должен быть более безопасным. –