Question

Je sais que la distinction entre le bang (point d'exclamation) et les méthodes non-Bang est généralement si la méthode modifiera l'objet lui-même ou retourner un objet modifié séparé en gardant le

inchangé d'origine.

Ensuite, tout en construisant le modèle de l'utilisateur dans le chapitre 6 du livre, je suis tombé sur la méthode User.create, ce qui crée un nouveau modèle et il enregistre dans la base de données en une seule étape. est dans Michael Hartl Ruby on Rails 3 Tutoriel , il écrit que la méthode User.create! « fonctionne exactement comme la méthode create ... sauf qu'il soulève un ActiveRecord :: Record-Infirme exception si la création échoue. "

Je suis assez confus. Est-ce la méthode User.create! ne suit pas Ruby « bang-convention » ou suis-je manque quelque chose de complètement? Et s'il suit la convention, comment l'auto ne User.create! modifier si elle est une méthode de classe?

Était-ce utile?

La solution

Bien que beaucoup de classes traitent des méthodes bang comme « une méthode qui modifie l'objet en place », je aime la description des méthodes bang de la livre mieux Eloquent Ruby:

Dans la pratique, Ruby programmeurs réserve ! pour orner les noms des méthodes qui font quelque chose d'inattendu, ou peut-être un peu dangereux

Donc dans ce cas, le résultat « inattendu » est qu'une exception est soulevée au lieu d'échec et de retour false.

Autres conseils

Hope this helps ainsi:

Les versions bang (par exemple faites des économies!) Déclenche une exception si l'enregistrement est invalide. Les versions non-bang ne le font pas: sauver et update_attributes return false, créer et mettre à jour juste retourner les objets

.

Source: http://edgeguides.rubyonrails.org/active_record_validations.html#when -Est-validation-se-questionmark

Edit: la source modifié pour résoudre un lien cassé

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top