2009-07-31 12 views
10

Ho una raccolta di oggetti ActiveRecord. Voglio essere in grado di eseguire tutte le convalide per ciascuno di questi oggetti senza salvarli effettivamente nel database. Voglio solo sapere se sarebbero validi se li avessi salvati nel database. In altre parole, in sostanza voglio popolare la struttura dati errors per ciascuno dei miei oggetti. C'è un modo per fare questo? O forse mi manca qualcosa sul ciclo di vita della collezione errors?Esecuzione convalida di ActiveRecord senza salvare

risposta

23

È possibile effettuare le seguenti operazioni per verificare se un modello è valido:

@user = User.new 
if @user.valid? 
    #do things 

Se volete vedere che cosa gli errori sono, si può fare:

@user = User.new 
unless @user.valid? 
    @user.errors.each {|k, v| puts "#{k.capitalize}: #{v}"} 

Chiamando il ".valido?" metodo esegue le convalide, inserendo tutti i tuoi errori in un oggetto ActiveRecord :: Errors, a cui puoi accedere come ho fatto nell'esempio sopra. Prova gli esempi nella Console per farti un'idea se lo desideri.

+0

Lungo le linee simili, sto cercando di visualizzare un collegamento di pubblicazione basato sul record valido per la pubblicazione o meno. Nelle mie convalide, sto usando validati: se il formato. C'è un modo semplice per cambiare l'attributo per dire: true e quindi verificare se è valido per la pubblicazione? Ad es. post = Post.nuovo (: titolo => "titolo",: pubblicato => falso) post.published = true se post.valid? post.published = false – chetu

2

L'esecuzione del metodo #valid? sull'oggetto eseguirà tutte le convalide e popolerà la struttura errors.

dude = Person.new 
unless dude.valid? 
    # Examine errors 
end 
Problemi correlati