【问题标题】:ember data error: Assertion Failed: You can only add a 'user' record to this relationshipember 数据错误:断言失败:您只能将“用户”记录添加到此关系
【发布时间】:2023-03-14 20:27:02
【问题描述】:

我有一个这样的 ember 模型:

var attr = DS.attr,
    hasMany = DS.hasMany,
    belongsTo = DS.belongsTo;
App.Message = DS.Model.extend({
    message: attr(),
    user: belongsTo('user'),
    inquiry: belongsTo('inquiry')
});

我想像这样创建记录:

var createMessage = this.store.createRecord('message', {
    'message': "test message",
    'user': 1,
    'inquiry': 1
});
createMessage.save();

我知道这个问题已经被问过好几次了,但我找不到任何明确的解决方案。有人可以描述一下为什么会发生这个错误以及解决方案是什么。我正在使用 Ember: 1.6.1 和 Ember-data: 1.0.0-beta.5

【问题讨论】:

  • 你怎么知道用户 ID 1 是谁?你的长期目标是什么,这是我真正的问题
  • 也许这就是我正在寻找的答案。我实际上如何传递用户 ID?

标签: ember.js ember-data


【解决方案1】:

当我将createRecord() 与关系一起使用时,我手动构造了每个对象。有几种不同的方法可以做到这一点:

有关向hasMany 关系添加元素的示例,请参阅Ember.js & Ember Data: How to create record with hasMany relationship when the parent and child don't exist yet

或者这是处理belongsTo 关系时的另一个示例:

var message = this.store.createRecord('message');
var user = this.store.createRecord('user');
message.set('user', user);

最终,Ember 可能会序列化这个DS.Model,使其只有一个数字作为 id,但在内部,它需要一个指向实际对象的实际链接。

更新:(感谢@Craicerjackless

如果用户确实存在并且你有 id:

 var user = this.store.find('user', 1).then(function(user){
    message.set('user, user);
});

这会通过 id "1" 获取用户,然后在找到用户后将其设置为模型的用户。

【讨论】:

  • 我刚刚收到建议的编辑,但无法通过 SO 合并或批准它们。我手动添加了编辑并记下了作者;如果有其他方法可以处理,请告诉我!
猜你喜欢
  • 1970-01-01
  • 2012-11-28
  • 1970-01-01
  • 1970-01-01
  • 2014-08-08
  • 1970-01-01
  • 1970-01-01
  • 2011-02-13
相关资源
最近更新 更多