2011-02-15 10 views

Respuesta

17

Sí, create! lanzará una excepción en caso de fallo, create sólo devuelve falso. Documentación aquí:

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

+0

estaba mirando http://api.rubyonrails.org/classes/ActiveRecord/Base.html y no pudo encontrarlo ... tal vez no debería haber un enlace a su página de –

+1

@ 動靜 能量: se siempre puede consultar el [índice del método RoR] (http://api.rubyonrails.org/fr_method_index.html). Este es el marco inferior izquierdo cuando vas a api.rubyonrails.org – cam

1

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

1

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

#create

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

Aquí hay algunos intentos 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/[email protected]_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 
=> #<Person:0x007fdb4cc5b0a0 id: nil, name: nil, created_at: nil, updated_at: nil> 
[4] pry(main)> Person.count 
    (0.2ms) SELECT COUNT(*) FROM "people" 
=> 0 
[5] pry(main)> 
Cuestiones relacionadas