PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Rails non esegue il rollback della transazione dopo il salvataggio non riuscito()

L'aggiunta di un elemento alla raccolta lo salva immediatamente (a meno che l'utente non sia stato salvato). La chiamata al salvataggio crea la propria transazione e questo è ciò che viene ripristinato, non la transazione in cui viene salvato l'elemento

Potresti forzare tutto nella stessa transazione creandone una esplicitamente.

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