2011-11-10 18 views

Respuesta

15

pocas palabras: crear! plantea una excepción, create devuelve el objeto (objeto no guardado si no pasa las validaciones). ¡salvar! provoca error, save devuelve verdadero/falso. guardar no toma atributos, crear hace.

nuevo no guarda. new es similar a compilar en contexto ActiveRecord. crea guardias en la base de datos y devuelve verdadero o falso según las validaciones del modelo. crear! guarda en la base de datos pero genera una excepción si hay errores en las validaciones del modelo (o cualquier otro error).

+1

He votado a favor porque esta es una buena respuesta. Sin embargo, 'create' no devuelve un booleano. Devuelve la instancia del objeto si pasó la validación o no. –

+0

@AdityaSanghi - gracias por su respuesta. dices: "crear! guarda en la base de datos pero genera una excepción si hay errores en las validaciones del modelo (o cualquier otro error)". --------> ¿cómo puede guardar algo en la base de datos si las validaciones no se pasan? – BKSpurgeon

+1

@ bkspurgeon no se guarda si las validaciones fallan. El método bang se comporta de manera diferente en caso de falla de la versión no bang. La versión de Bang genera una excepción y la versión que no es de tipo bang devuelve falso. –

2

Cuando no pudo crear registro, create! tiros una salida excepción, new y luego save (o simplemente create sin signo de exclamación) en silencio.

-3

create toma atributos, por lo que utilizar un bloque aquí es algo inusual. El código que mencionas está haciendo la inicialización en un bloque que se pasa a create! Es en principio los mismos que new seguido de la inicialización y luego un

Hay muchas variaciones ahorre, ahorre !, crear, ceate save! !, una actualización, !, etc., también hay variaciones en términos de validaciones y devoluciones de llamadas

Para más detalles, consultar la API: (se discute en el primer link)

http://api.rubyonrails.org/classes/ActiveRecord/Base.html

http://apidock.com/rails/ActiveRecord/Base

http://m.onkey.org/active-record-query-interface

+1

ligeramente incorrecto. crear/crear!/guardar/guardar! son todos sutilmente diferentes. crear/crear! tomar los atributos del modelo. guardar/guardar! no tome en los parámetros de atributos del modelo. los métodos con bang (create!/save!) levantan excepciones en la falla de validación y métodos sin bang (crear/guardar) dont. –

+0

también save doesnt returns nil, devuelve el resultado de las validaciones (verdadero o falso). –

+1

eso es ridículo. Nunca dije que 'guardar' tomaría argumentos. He señalado la documentación relevante: ¿cómo está mal? – Tilo