2016-07-22 50 views
7

一个有两个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.

回答

21

好吧,我想通了 - mongoid协会有optional选项,它似乎并没有被记录得非常好。

所以它应该是:

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

在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