Selon save bang your head, active record will drive you mad, nous devrions éviter d'utiliser save!
et rescue
idiome pour des situations exceptionnelles. Compte tenu de cela, disons qu'un modèle doit @post.mark_rejected
.Quand utiliser `save` vs` save! `Dans le modèle?
Si le code mark_rejected
échoue en raison de l'un des problèmes ci-dessous, une exception doit-elle être levée? :
- s'il y a un problème de validation
- si un champ non annulable était attribué une valeur nulle
- s'il y avait une perte de connexion à la base de données
Si nous ne jeter une exception, alors:
- action du contrôleur devrait vérifier la valeur de retour de
mark_rejected
et de le faire est chose - nous n'attendons pas d'exception de cet appel de méthode, donc nous n'écrivons pas une clause
rescue
dans l'action du contrôleur, donc l'exception monte en bulles jusqu'à (..wherever ..) et apparaîtra probablement comme une (500 HTTP ?) erreur
code Exemple:
def mark_rejected
...
save!
end
ou
def mark_rejected
...
save
end
@Zabba Voici le [code source et documentation de 'save' et' save! '] (Https://github.com/rails/rails/blob/master/activerecord/lib/active_record/persistence.rb# L86). – JJD