2011-09-25 12 views
5

Esiste un modo per attivare la convalida solo in moduli specifici (azione del controllore), non a livello globale ad ogni salvataggio o aggiornamento? Qualcosa come la bandiera User.create(:validate=>true).Convalida solo in forma specifica

+0

Perché stai provando a farlo? Forse possiamo dare una risposta migliore se conosciamo le ragioni alla base della tua domanda. – rdvdijk

+0

Ho un modello Utente incasinato, non separato dal profilo, quando si registra è necessario fornire solo pochi campi e il resto deve essere completato dall'azione di modifica dell'utente. – methyl

+0

È possibile superare tutte le convalide del tipo: Model.save (false) – emrahbasman

risposta

8

Sì, è possibile fornire i condizionali per le convalide, ad esempio:

validates_presence_of :something, :if => :special? 

private 

def make_sepcial 
    @special = true 
end 

def special? 
    @special 
end 

Ora tutto ciò che dovete fare per attivare queste convalide è:

s = SomeModel.new 
s.make_special 
+0

Quindi, dopo aver salvato il modello, devo impostare speciale su false, giusto? – methyl

+0

No. '@ special' è solo una variabile di istanza. A meno che tu non abbia ancora del lavoro da fare, puoi lasciarlo morire, non verrà mantenuto per ulteriori query sul database. – thomasfedb

4

Come spiegato nei commenti, vuoi saltare la convalida per i nuovi record. In tal caso, è possibile utilizzare la risposta di thomasfedb, ma non utilizzare la variabile @special, ma:

validates_presence_of :something, :if => :persisted? 

Ciò convaliderà solo per salvati User s, ma non per i nuovi User s. Consulta la documentazione dell'API su persisted?.

+0

Puoi anche usare: unless =>: persistente? se vuoi il contrario - convalida su nuovi ma non per salvati. –

+0

Questa è la risposta corretta – doz87

Problemi correlati