2016-07-08 4 views
0

Я создаю сайт событий с использованием 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 в таблицу заказов?

ответ

0

Я предполагаю, что вы создали схему bookings, используя migration. Если это не так, попробуйте использовать его.

Нет необходимости явно добавлять столбец booking_id, рельсы добавят его. О убедившись, что запись будет сохранена, вы можете использовать begin/rescue clause:

begin 
    @booking.save! 
rescue 
    # error handling code 
end 

Вы также можете использовать rails console, чтобы увидеть, что это последняя Booking записи в базе данных.

$ rails c --sandbox 
>> Booking.last 

Я надеюсь, что это поможет.

+0

Большое спасибо. Да, я использовал миграцию. Идентификатор бронирования был бы полезен, тем не менее, чтобы предоставить людям, когда они заказывают события? –

+0

Затем назовите его 'booking_number', поскольку ваше фактическое сообщение вызывает его. Это предотвратит путаницу между техническими идентификаторами и токенами, ориентированными на пользователя. –

+0

Я согласен, существует 'booking_id', но пользователи не должны знать ваши внутренние приложения, номер' booking_number' должен быть более безопасным. –

Смежные вопросы