禁用 mongoid belongs_to 关联验证

Disable mongoid belongs_to association validation

A 有两个 mongoid 模型,它们之间有一个简单的 has_many/belongs_to 关系:

class Lot
  include Mongoid::Document
  has_many :journal_items
end

class JournalItem
  include Mongoid::Document
  belongs_to :lot
end

问题是我无法在没有 Lot 的情况下创建 JournalItem,因为 mongoid 默认情况下似乎在 JournalItem.lot_id 上添加了非空验证。

JournalItem.create!
# raises validation error "Lot can't be blank"

如何禁用它?

我使用 mongoid master Rails 5.

好的,我已经弄明白了 — mongoid 关联有 optional 选项,似乎没有很好地记录。

所以应该是:

class JournalItem
  include Mongoid::Document
  belongs_to :lot, optional: true
end

In Rails 5 belongs_to 将默认为 required: true(参见 rails/rails/pull/18937

所以现在要求:不推荐使用 true:

belongs_to :company, required: true # deprecated => `required: true`

要在基于 ActiveRecord 的应用程序上禁用此选项,您应该创建一个初始化程序来显式配置应用程序的新行为:

# config/initializers/active_record_belongs_to_required_by_default.rb

Rails.application.config.active_record.belongs_to_required_by_default = true

对于每个不需要的 belongs_to 关系,只需添加 optional: true.

belongs_to :company, optional: true

对于 Mongoid +6.0,您需要在 Mongoid 初始值设定项中添加此选项:

# config/initializers/mongoid.rb
Mongoid::Config.belongs_to_required_by_default = false