Cuando las transacciones se inician cuando se utiliza (restful) rieles
-
02-07-2019 - |
Pregunta
Es el caso de que la totalidad de descanso verbo está bajo un solo abarca todo transacción?Es decir, si levanto un Error en la validación o devoluciones de llamada en cualquier punto en el manejo de un UPDATE, DELETE, o CREAR una operación, es cada operación de base de datos que yo he realizado en los anteriores devoluciones de llamada también se revierte?Sucintamente, no criar a un Error en cualquiera de devolución de llamada o de validación de hacer que no hay ningún cambio se produce en la base de datos para que la acción del verbo?
Solución
Es el caso de que la totalidad de descanso verbo está bajo un solo abarca todo transacción?
No
si levanto un Error en la validación o devoluciones de llamada en cualquier punto en el manejo de un UPDATE, DELETE, o CREAR una operación, es cada operación de base de datos que yo he realizado en los anteriores devoluciones de llamada también se revierte?
No.
hace criar a un Error en cualquiera de devolución de llamada o de validación de hacer que no hay ningún cambio se produce en la base de datos para que la acción del verbo?
No.
Si usted desea este comportamiento puede crear explícitamente las transacciones en el controlador (consulte los ejemplos proporcionados por otros usuarios), o el uso de un around_filter
para asociar el comportamiento de todos sus restful acciones.
Otros consejos
Por defecto no hay ninguna base de datos de código escrito dentro de una transacción, usted necesita decirle que lo haga en el código.
def create
Model.transaction do
Model.create!(params[:model])
Model.association.create!(params[:association])
end
rescue ActiveRecord::RecordNotSaved, ActiveRecord::RecordInvalid
flash[:notice] = "That record could not be saved."
render :action => "new"
end
Con la #crear!los métodos de intento de guardar el registro, y si no que provocará una excepción que luego deshacer cualquier código que ya se realiza en el interior del bloque de transacciones.
Si no rescatar a la acción que usted va a ser redirigido a (creo) un 405.html en su directorio público, si existe.
Algunos métodos (crear, destruir) ir a la base de datos inmediatamente.Las transacciones se realizan mediante el método de transacción en las clases que derivan de ActiveRecord de la siguiente manera:
Student.transaction do
Course.transaction do
course.enroll(student)
student.units += course.units
end
end
(Este ejemplo es para múltiples bases de datos.De una sola base de datos, sólo se necesita una transacción.)
Usted puede, a continuación, la reversión de estas transacciones, y excepciones dentro de la transacción se propagan después de la reversión.
Esto depende de la base de datos tener las transacciones.
NB:salvar y destruir están envueltos en las transacciones.