【发布时间】:2020-05-27 11:59:05
【问题描述】:
这里是 Rails 后端开发新手。第一次尝试集成支付网关。希望我能设法解释一切。
我正在使用支付网关 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(负责预订和支付网关之间的所有逻辑)
# 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。所以我不确定这个过程应该是什么样子。
提前感谢您提供的任何帮助。
【问题讨论】:
-
不能有两张桌子这样互相要求,为什么Booking一定要有
booking_transaction_id? -
昨天意识到了这一点。修复了我的问题。我会发布一个解决方案。谢谢
标签: ruby-on-rails activerecord mangopay