# app/models/order.rb
class Order < ApplicationRecord
belongs_to :payment
end
# app/models/payment.rb
class Payment < ApplicationRecord
has_many :orders
end
业务场景中,先有订单order
,然后才生成的支付数据payment
,但是订单保存的时候抛出错误
ActiveRecord::RecordInvalid (Validation failed: Payment must exist)
原来在rails5 belongs_to的关联项必须存在,要想实现上面的业务场景,我们就要绕过这个校验,有两种常见的方法:
- 取消单个
model
的关联对象验证:
# app/models/order.rb
class Order < ApplicationRecord
belongs_to :payment, optional: true
end
- 取消所有
model
的关联对象验证:
# config/application.rb
Rails.application.config.active_record.belongs_to_required_by_default = false