2016-07-22 20 views
7

A haben zwei mongoid Modelle mit einer einfachen has_many/belongs_to Beziehung zwischen ihnen:Disable mongoid belongs_to Verein Validierung

class Lot 
    include Mongoid::Document 
    has_many :journal_items 
end 

class JournalItem 
    include Mongoid::Document 
    belongs_to :lot 
end 

Das Problem ist, dass ich kein JournalItem ohne Lot schaffen kann, wie es das mongoid scheint fügt eine Nicht-Null-Validierung auf dem JournalItem.lot_id standardmäßig.

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

Wie kann ich es deaktivieren?

Ich benutze den mongoid Master mit Rails 5.

Antwort

21

Ok, ich habe es herausgefunden - mongoid Verbände haben die optional Option, die nicht sehr gut dokumentiert zu sein scheint.

So sollte es sein:

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

In Rails 5 belongs_to zu erforderlich ausfällt: true (rails/rails/pull/18937 sehen)

So, jetzt erforderlich: true ist veraltet:

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

Um diese Option in ActiveRecord-basierten Anwendungen zu deaktivieren, sollten Sie einen Initialisierer erstellen, um das neue Verhalten von fo explizit zu konfigurieren r die app:

# config/initializers/active_record_belongs_to_required_by_default.rb 

Rails.application.config.active_record.belongs_to_required_by_default = true 

Und für jede angehörigen_zu relation, die nicht erforderlich ist, fügen sie einfach optional: true.

belongs_to :company, optional: true 

Und für Mongoid +6,0 Sie diese Option in Ihrem Mongoid initializer hinzufügen müssen:

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