禁用 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
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