Così mi sono tirato fuori i capelli per la risoluzione di questo errore che ho riscontrato e alla fine ho scoperto che cosa stava causando. Avevo sempre avuto l'impressione che quando ho chiamatomy_object.save (false) non salta VERAMENTE le convalide di Active Record
@my_model.save(false)
Che sarei stata saltare miei convalide ActiveRecord. Risulta che questo è parzialmente vero. I miei oggetti stanno salvando nel database DESPITE la mia convalida ActiveRecord. Il mio problema esiste perché una delle mie convalide modifica uno dei modelli figli durante il processo di convalida (questa è un'applicazione di pianificazione per un percorso di 24 ore, quindi quando i pranzi vengono salvati, li controllo rispetto al giorno in cui stanno salvando, E il giorno dopo per assicurarsi che l'utente non intendesse "2am" per un turno di notte
La mia domanda è questa: c'è un modo per saltare le convalide e passare direttamente al database? È normale comportamento di ActiveRecord o dovrei approfondire le mie convalide? O sono sfortunato e ho bisogno di riscrivere le convalide?
Quindi mi stai dicendo che il codice di convalida è ancora in esecuzione, è solo ignorando il risultato di loro, e questo è un problema poiché si modifica il modello nelle convalide. Userei qualcosa di diverso dalle convalide per disinfettare i dati. – bhollis
Questo è esattamente! Immagino che questa sia la mia risposta definitiva, ma ho pensato di provare la mia fortuna per vedere se riuscissi a trovarne un'altra. – BushyMark
L'utilizzo di convalide per post-elaborare i tuoi oggetti aziendali è sicuramente un odore. Le convalide servono a verificare i dati, non a modificarli. Per modificare, usa invece i vari hook del ciclo di vita di ActiveRecord: prima/dopo-salva, prima/dopo-crea, ecc. – Matthias