2011-01-26 10 views
5

Desidero saltare una convalida dopo la creazione di un oggetto. Consente di prendere un esempioignorare la convalida dopo aver creato le rotaie mongoidali

persona ha molte società e la società ha molte persone

persona ha molti tirocini e placement appartiene alla persona persona può avere solo un posizionamento attivo

modello Posizionamento ha una validazione che controlla se una persona ha già un posizionamento attivo quando viene salvato.

@placement is active placement 
@employment.placement = @person 

if @placement.save 
    ################# 
    @person.placements << @placement 
    @company.placements << @placement 
end 

Ora, quando il posizionamento viene salvato per la prima volta, la sua Nessun problema viene salvato.

Ora il problema viene quando

@person.placements << @placement 

Dal momento che la persona ha già posizionamento attivo attraverso @ placement.save.

@ person.placements < < @placement salva di nuovo @placement e la convalida genera l'errore di convalida sull'oggetto @placement.

Esiste un modo in cui dico di non passare attraverso quella specifica convalida in qualche punto nella regione ############ del mio codice.

O qualsiasi soluzione alternativa è la benvenuta.

Grazie

+0

Si dovrebbe accettare la risposta se ha funzionato per voi. Dai al ragazzo i suoi punti. :) – sujal

risposta

11

è possibile utilizzare: salvare: validate => false

+0

Ma come si salva **: validate => false ** mentre si utilizza l'operatore << poiché salva sia @company che @placements contemporaneamente? Qualsiasi idea – Gagan

+0

salva il posizionamento per primo (con convalida falso), quindi aggiungilo alla tua azienda – MatthewFord

0

La prima cosa se si desidera salvare dopo tutte le convalide passa poi fare qualcosa di simile

if @placement.valid? 
    @person.placements << @placement 
    @company.placements << @placement 
end 

prossima cosa è se si utilizza mongoid poi << operatore di call .save su entrambi i documenti .

La soluzione può essere o sovrascrivere << di mongoid, oppure è necessario speacificare la convalida durante quale azione.

validates :placeholder, :on => :create E O

if @placement.valid? 
    @placement.person = @person 
    @company.placements << @placement 
end 
Problemi correlati