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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top