我的余烬应用程序没有将我的外键发送到后端。
我有一个名为 issues 的表,它有一个名为 categories 的相关表
我的模特是:
import DS from 'ember-data';
export default DS.Model.extend({
name: DS.attr('string'),
category_id: DS.belongsTo('category'),
description: DS.attr('string')
});
我的路线是:
import Ember from 'ember';
export default Ember.Route.extend({
model: function(){
return this.store.findAll('issue');
},
actions: {
create: function(){
var issue = this.store.createRecord('issue');
issue.name = this.get('controller').get('newName');
issue.description = this.get('controller').get('newDescription');
issue.category_id = parseInt(this.get('controller').get('newCategory'));
//debugger;
console.log(issue);
issue.save();
},
...
other actions
...
}
}
});
上面的console.log看起来正确设置了category_id:
category_id: 3
description: "foobar"
name: "test"
然而,我发送到后端的JSON有效负载如下所示:
{"issue":{"name":"test","description":"foobar","category_id":null}}
我尝试通过在app / serializers / application.js
中添加自定义序列化器来逐步完成export default DS.RESTSerializer.extend({
...
serialize: function(snapshot,options){
console.debug('options='+options);
debugger;
var json = this._super(snapshot, options);;
return json;
}
...
});
但是我迷失了所有超级调用的超级间接。
snapshot.record 有category_id: 3
,但是来自this._super()调用的 json 有category_id: null
选项有includeID:true
任何线索都会受到赞赏......
Ember:2.0.2
Ember数据:2.0.0
答案 0 :(得分:0)
您的模型定义错误,在处理您定义它们的关系时,就像定义任何其他属性一样,不需要使用_id
。
export default DS.Model.extend({
name: DS.attr('string'),
category: DS.belongsTo('category'),
description: DS.attr('string')
});
至于创建时,在处理ember对象时应始终使用setter / getter:
create: function() {
var issue = this.store.createRecord('issue', {
name: this.get('controller').get('newName'),
description: this.get('controller').get('newDescription'),
category: this.get('controller').get('newCategory') // assuming new category is a DS.Model instance of category
});
issue.save();
}
如果您希望坚持使用issue.set('name', this.get('controller').get('newName'))
的语法,从代码的外观来看,您似乎是以错误的方式解决这个问题。
您应该在问题路线下嵌套this.route('new')
,这样您就不必使用控制器来存储信息。
您只需将新路线的型号设置为:
model: function() {
return this.store.createRecord('issue');
}
您的模板会像input helpers那样使用:
{{input value=model.name}}
您的操作只会获得currentModel
并致电.save()
。