ruby ruby-on-rails-3 railstutorial.org

ruby - Rieles: crea y crea métodos, RoR 3 Tutorial



ruby-on-rails-3 railstutorial.org (2)

Así que sé que la distinción entre los métodos bang (exclamación) y no bang usualmente es si el método modificará el objeto mismo o devolverá un objeto modificado por separado manteniendo el original sin cambios.

Luego, al construir el modelo de Usuario en el capítulo 6 del libro, encontré el método User.create , que crea un nuevo modelo y lo guarda en la base de datos en un solo paso. En el Tutorial de Ruby on Rails 3 de Michael Hartl, él escribe que el User.create! method "funciona igual que el método create ... excepto que genera una excepción ActiveRecord :: Record-Invalid si la creación falla".

Estoy bastante confundido. Es el User.create! método no seguir Ruby "bang-convención" o me falta algo por completo? Y si él sigue la convención, ¿cómo User.create! ¿modificar uno mismo si es un método de clase?


Aunque muchas clases tratan los métodos bang como "un método que modifica el objeto en su lugar", me gusta más la descripción de los métodos bang del libro Eloquent Ruby :

¡En la práctica, los programadores de Ruby se reservan! adornar los nombres de los métodos que hacen algo inesperado, o quizás un poco peligroso

Entonces, en este caso, el resultado "inesperado" es que se genera una excepción en lugar de solo fallar y devolver false .