sql >> Base de Datos >  >> RDS >> PostgreSQL

Los rieles no revierten la transacción después de un guardado fallido ()

Agregar un elemento a la colección lo guarda inmediatamente (a menos que el usuario no haya sido guardado). La llamada para guardar crea su propia transacción y eso es lo que se revierte, no la transacción en la que se guardó el elemento

Puede forzar todo en la misma transacción creando una explícitamente.

begin
  User.transaction do
    @user.items << item
    @user.save!
    render :json => {}, :status => :ok
  end
rescue ActiveRecord::RecordInvalid
  render :json => {:status => :error, :errors => item.errors}, :status => :bad_request
end