没有关系字段数据的ember数据createRecord

时间:2014-08-26 20:13:04

标签: ember.js ember-data

我有一个这样的余烬模型:

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

在我的路线中我想保存它:

 var createMessage = this.store.createRecord('message', {
        'message': "this is sample message",
        'user_id': 1,
        'inquiry_id': 1
    });
createMessage.save();

但我在我的请求中看到,ember数据还添加了用户字段。我没有在我的请求中发送此字段。有什么方法可以做到这一点。我想仅使用用户关系字段来获取请求而不是发布请求。 版本Ember:1.6.1和 Ember-data:1.0.0-beta.5

2 个答案:

答案 0 :(得分:1)

默认情况下,Ember数据将包含您在模型上定义的所有属性,无论它们是否已设置为值。如果您需要从请求中删除额外字段,则可以创建自定义序列化程序并覆盖serialize方法以将其从默认序列化中删除:

App.MessageSerializer = DS.RESTSerializer.extend({
  serialize: function(message, options) {
    var json = this._super(message, options);
    delete json.users;
    return json;
  }
});

然而,根据应用程序的复杂程度,如果您可以坚持使用单个字段来表示关系,而不是尝试管理两个不同的字段,那么整体情况可能会更容易获取和设置用户。如果您能够访问所需的用户模型并将其设置为user字段,则Ember可以在提交时将序列化处理到正确的字段。

显然,可能需要根据您的服务器进行自定义;因为看起来您的服务器希望将其格式化为user_id,我猜你可能想要查看Ember数据ActiveModelSerializer class,如果您还没有。<\ n / p>

答案 1 :(得分:1)

正如@gorner建议我修改我的模型:

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

所以,现在我有单个字段来表示关系。我也正在修改

serializeBelongsTo method like this: 
    serializeBelongsTo: function(record, json, relationship){
        var key = relationship.key;
        var belongsTo = Ember.get(record, key);
        key = this.keyForRelationship ? this.keyForRelationship(key, "belongsTo") : key;
        json[key+'_id'] = Ember.get(belongsTo, 'id'); //my backend support field name underscore
    }