【问题标题】:Rails 6: How to conditionally validate an association for presence?Rails 6:如何有条件地验证存在的关联?
【发布时间】:2020-06-17 17:50:39
【问题描述】:

我有以下两种型号:

class Offer < ApplicationRecord
  has_many :bookings
end

class Booking < ApplicationRecord
  belongs_to :offer
end

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

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

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

【问题讨论】:

    标签: validation associations ruby-on-rails-6


    【解决方案1】:

    从 Rails 5 开始,belongs_to 默认添加了存在验证。 您可以在application.rb 中禁用此行为:

    config.active_record.belongs_to_required_by_default = false
    

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

    belongs_to :offer, optional: true
    

    【讨论】:

    • 谢谢!为了使其成为条件验证,我必须再次手动添加它,就像validates :offer, presence: true, if: my_condition 这样的普通(条件)验证,对吧?
    猜你喜欢
    • 2011-08-07
    • 2011-09-12
    • 1970-01-01
    • 2018-01-24
    • 2011-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多