Rails 6:如何有条件地验证关联的存在?

Tom*_*ogg 2 validation associations ruby-on-rails-6

我有以下2个型号:

class Offer < ApplicationRecord
  has_many :bookings
end

class Booking < ApplicationRecord
  belongs_to :offer
end
Run Code Online (Sandbox Code Playgroud)

当我尝试保存没有 Offer_id 的 Booking 对象时,Rails 会抛出验证错误“需要 Offer”。

但我不会主动验证关联对象是否存在(我打算稍后为此关联添加条件验证)。

这是否意味着 Rails 6 默认情况下会验证所有关联的存在?如果是,我怎样才能使这样的验证成为有条件的?

Mos*_*leb 6

从 Rails 5 开始,belongs_to默认添加存在验证。您可以通过以下方式禁用此行为application.rb

config.active_record.belongs_to_required_by_default = false
Run Code Online (Sandbox Code Playgroud)

或者,如果您希望它仅在此处是可选的,belongs_to您可以将optional选项传递给belongs_to:

belongs_to :offer, optional: true
Run Code Online (Sandbox Code Playgroud)