禁用mongoid belongs_to的关联验证
问题描述:
一个有两个mongoid模型用一个简单的has_many/belongs_to的它们之间的关系:禁用mongoid 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主使用Rails 5.
答
好吧,我想通了 - mongoid协会有optional
选项,它似乎并没有被记录得非常好。
所以它应该是:
class JournalItem
include Mongoid::Document
belongs_to :lot, optional: true
end
答
在Rails 5 belongs_to的将默认为必需的:真(见rails/rails/pull/18937)
所以现在需要的:真正的被弃用:
belongs_to :company, required: true # deprecated => `required: true`
要在基于ActiveRecord的应用程序上禁用此选项,您应该创建一个初始化程序以显式配置新的行为r应用程序:
# config/initializers/active_record_belongs_to_required_by_default.rb
Rails.application.config.active_record.belongs_to_required_by_default = true
并且对于不需要的每个belongs_to关系,只需添加可选:true。
belongs_to :company, optional: true
而对于Mongoid 6.0,您需要在您的Mongoid初始化添加此选项:
# config/initializers/mongoid.rb
Mongoid::Config.belongs_to_required_by_default = false