2015-03-25 9 views
6

La mia convalida personalizzata sembra essere eseguita prima del mio blocco before_save, il che è strano per me. Sono a conoscenza di before_validation, ma sto provando a testare il mio validatore personalizzato, quindi un hook before_validation non me lo permetterebbe. Ho anche letto che testare un metodo privato (il mio validatore) è una cattiva pratica. Cosa dovrei fare?Does before_save eseguito dopo le convalide?

Ulteriori informazioni: Vogliamo che gli utenti siano in grado di caricare un documento con un URL o un file, ma non entrambi o nessuno (xor). Il mio validatore controlla lo xor di questi. Se un utente modifica un documento, l'hook before_save rimuove l'URL o il file corrente. In teoria, il flusso dovrebbe essere:

  1. Carica un file
  2. Convalida e salvare
  3. Carica URL
  4. before_save, validare, salvare

Ma nel mio test, ricevo errori di convalida , suggerendo che il before_save non si sta verificando.

+3

sì: http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html – Kamen

+0

Perché non eseguire la convalida e scrivere un altro metodo? Quindi il before_save può chiamare il metodo di "validazione" personalizzato – liyicky

risposta

14
after_initialize ↓ (1) 

before_validation ↓ (2) 
after_validation ↓ (3) 

before_save ↓ (4) 

before_create ↓ (5) 
after_create ↓ (6) 

after_save ↓ (7) 

after_commit ↓ (8)