En Ruby on Rails, ¿cuál es la diferencia entre crear y crear! ¿Y los documentos API no lo tienen?

ActiveRecord ha create y algunas personas usan create! … es lo que create! ¿Se puede generar una excepción mientras que create no? No puedo encontrar create! en los actuales documentos API de Rails …

Sí, create! generará una excepción en caso de error, create simplemente devuelve falso. Documentación aquí:

http://api.rubyonrails.org/classes/ActiveRecord/Validations/ClassMethods.html#method-i-create-21

Sí. Se genera una excepción si el registro no es válido.

Lo he probado en Rails 4.2.0 . En esta versión de Rails, parece, #create! Funciona como se dijo en la otra respuesta, pero no el método #create .

#create

crea un objeto (o varios objetos) y lo guarda en la base de datos, si pasan las validaciones. El objeto resultante se devuelve si el objeto se guardó correctamente en la base de datos o no .

Aquí hay algunos bashs según la documentación.

 Arup-iMac:rails_app_test shreyas$ rails c Loading development environment (Rails 4.2.0) [1] pry(main)> show-models Person Person id: integer name: string created_at: datetime updated_at: datetime [2] pry(main)> Person.create! (0.1ms) begin transaction (0.1ms) rollback transaction ActiveRecord::RecordInvalid: Validation failed: Name can't be blank, Name is too short (minimum is 3 characters) from /Users/shreyas/.rvm/gems/ruby-2.1.5@rails_app_test/gems/activerecord-4.2.0/lib/active_record/validations.rb:79:in `raise_record_invalid' [3] pry(main)> Person.create (0.1ms) begin transaction (0.0ms) rollback transaction => # [4] pry(main)> Person.count (0.2ms) SELECT COUNT(*) FROM "people" => 0 [5] pry(main)>