我正在尝试在具有两个belongsTo关系的模型上管理ember-data事务(创建和提交记录)。最初,我只是使用(在Coffeescript中)将新记录添加到事务中:
@transaction.createRecord(App.Book, {author: App.router.authorController.get('content')})
这将author属性(DS.belongsTo关系)设置为当前作者,然后在表单中用户设置书籍的其他属性,包括select元素中的另一个belongsTo关系(比如发布者)。这很好,但如果用户去创建第二个新记录,我会得到以下断言:
Ember.assert("All records in a changed relationship must be in the same transaction. You tried to change the relationship between records when one is in " + t + " and the other is in " + prev, t === prev);
这是one_to_many_change.js file in Ember Data
的第203行我认为这意味着我必须手动将所有相关的模型对象添加到事务中。所以我可以使用类似的东西将作者模型添加到事务中:
author = App.router.authorController.get('content')
@transaction.add(author)
然后对可能受到影响的任何发布商模型执行相同操作(我在控制台中执行这些操作)。但是,当我这样做时,我得到以下错误:
Error: assertion failed: Once a record has changed, you cannot move it into a different transaction
即使先前(原始)事务已提交,也会发生这种情况。只是想知道其他人是如何处理这个问题的。我想在事务中分配这种关系必须是Ember Data应用程序中的常见过程。
答案 0 :(得分:0)
您的author
对象似乎已被修改并附加到默认事务。
然后,您创建一个新事务并在此创建一本书。
然后您需要保留2条记录,这两条记录都是通过关联链接的,但它们位于不同的交易中。
这样做的一种方法是使用author
交易来创建您的图书
var book = author.get('transaction').createRecord(App.Book, {author: author});