我有一个这样的余烬模型:
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
答案 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
}