In base a save bang your head, active record will drive you mad, dovremmo evitare di utilizzare l'idioma save!
e rescue
per situazioni eccezionali. Detto questo, supponiamo che un modello abbia bisogno di @post.mark_rejected
.Quando usare `save` vs` save! `Nel modello?
Se il codice in mark_rejected
non riesce a causa di uno dei seguenti problemi, è necessario generare un'eccezione? :
- se c'è un problema di validazione
- se un non-nullable-campo è stato viene assegnato un valore nullo
- se ci fosse una perdita di connessione al database di
Se noi non gettiamo un'eccezione, quindi:
- azione di controllo avrebbe dovuto controllare per valore di ritorno di
mark_rejected
e da fare è cosa - non ci aspettiamo un'eccezione da quella chiamata di metodo, quindi non scriviamo una clausola
rescue
nell'azione del controller, quindi l'eccezione bolle fino a (..wherever ..) e probabilmente verrà visualizzata come alcuni (500 HTTP ?) errore
codice Esempio:
def mark_rejected
...
save!
end
o
def mark_rejected
...
save
end
@Zabba Ecco il [codice sorgente e la documentazione di 'save' e' save! '] (Https://github.com/rails/rails/blob/master/activerecord/lib/active_record/persistence.rb# L86). – JJD