Функция бронирования Rails с помощью Payment Gateway - PullRequest
0 голосов
/ 27 мая 2020

начинающий разработчик Rails Back-end здесь. Первая попытка интегрировать платежный шлюз. Надеюсь, мне удастся все объяснить.

Я создаю платформу рынка бронирования, используя платежный шлюз Mangopay (необязательно знать эту технологию для моего запроса)

Итак, из того, как Я представил себе процесс бронирования, у меня есть две модели:

Bookings

# Schema
create_table "bookings", force: :cascade do |t|
  t.bigint "booking_transaction_id", null: false
  ...
end

# Model
class Booking < ApplicationRecord
  belongs_to :user
  has_one :booking_transaction
  ...
end

Booking_transactions (отвечает за все лог c между бронированием и платежным шлюзом)

# Schema
create_table "booking_transactions", force: :cascade do |t|
  t.bigint "booking_id", null: false
  ...
end

# Model
class BookingTransaction < ApplicationRecord
  belongs_to :booking
  ...
end

Затем у меня есть контроллер, в котором я хочу создать booking. Но для бронирования нужен booking_transaction, верно? Я начал писать что-то подобное в своем контроллере:

def create
  booking = current_user.bookings.create!(

  )
end

Но, конечно, я получаю NotNullViolation, потому что для создания бронирования требуется booking_transaction_id. Так что я не уверен, как должен выглядеть процесс.

Заранее благодарим за любую помощь.

1 Ответ

1 голос
/ 28 мая 2020

Оказывается, у меня не должно быть двух моделей, требующих друг друга.

Я удалил ссылку booking_transaction (ie booking_transaction_id) из модели booking.

И теперь вы можете создать бронирование следующим образом:

def create
  transaction = BookingTransaction.new

  booking = current_user.bookings.create!(
    transaction: transaction
    ...
  )
end

Это создаст booking_transaction и прикрепит его к недавно созданному экземпляру booking благодаря Rails Way.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...