2016-07-22 53 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