Cómo deshacer los cambios de relación en EmberData

Tengo dos modelos con relación padre-hijo: entrenamiento y ejercicio:

App.Training = DS.Model.extend({
  exercises: DS.hasMany('App.Exercise')
})

App.Exercise = DS.Model.extend({
  training: DS.belongsTo('App.Training')
})

Quiero tener una página donde se muestre un entrenamiento con todos sus ejercicios relacionados. Si el usuario presiona elEdit Botón, la página se vuelve editable con la posibilidad de añadir nuevos ejercicios. Yo tambien quiero tener unCancel Botón que descarta todos los cambios realizados.

Aquí está mi controlador:

App.TrainingsShowController = Em.ObjectController.extend({
  editing: false,

  edit: function() {
    this.set('editing', true);
    transaction = this.get('store').transaction();
    transaction.add(this.get('model'));
    this.get('model.exercises').forEach(function(x){
      transaction.add(x);
    });
  },

  cancel: function() {
    this.set('editing', false);
    this.get('model.transaction').rollback();
  },

  save: function() {
    this.set('editing', false);
    this.get('model.transaction').commit();
  },

  addExercise: function() {
    this.get('model.exercises').createRecord({});
  }
})

Hay cuatro manejadores de eventos en el controlador:

edit: El usuario presionó elEdit Botón: se crea una transacción, la página se pone en modo "Edición".cancel: El usuario presionó elCancel Botón: la transacción se retrotrae y vuelve al modo "Normal".save: El usuario presionó elSave Botón: la transacción se compromete y vuelve al modo "Normal".addExercise: El usuario presionó elAdd exercise Botón: se crea un nuevo ejercicio (en la misma transacción) y se agrega a los entrenamientos.

La funcionalidad de reversión funciona bien, excepto para los registros recién creados: si presionoEdit botón, agregar un nuevo ejercicio y presionar elCancel Botón, el ejercicio recién creado permanece en la página.

¿Cuál es la mejor manera de deshacerse del registro infantil descartado?

ACTUALIZAR:

He creado un jsFiddle para reproducir el problema, pero funcionó. A diferencia de mi aplicación aquí he usadoDS.FixtureAdapter: http://jsfiddle.net/tothda/LaXLG/13/

Entonces he creado otro usandoDS.RESTAdapter y el problema se presentó:http://jsfiddle.net/tothda/qwZc4/5/

En el fiddle intente: Editar, Agregar nuevo y luego Retroceder.

Me di cuenta de que en el caso de RESTAdapter cuando agrego un nuevo registro secundario a unhasMany relación, el registro padre no se ensuciará. Lo que parece estar bien, pero cuando restituyo la transacción, el registro secundario recién creado permanece en el de los padres.ManyArray.

Todavía no sé cuál es la mejor manera de manejar la situación.

Respuestas a la pregunta(4)

Su respuesta a la pregunta