Ember.js 余烬数据未保存外键,以空值发送
我的余烬应用程序没有将外键发送到后端 我有一个名为issues的表,它有一个名为categories的相关表 我的模型是:Ember.js 余烬数据未保存外键,以空值发送,ember.js,foreign-keys,ember-data,Ember.js,Foreign Keys,Ember Data,我的余烬应用程序没有将外键发送到后端 我有一个名为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 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看起来类别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\u id:3
,但是从this.\u super()调用返回的json具有category\u id:null
选项有includeID:true
任何线索都将不胜感激
余烬:2.0.2余烬数据:2.0.0您的模型定义是错误的,在处理关系时,您定义它们就像定义任何其他属性一样,不需要使用
\u id
export default DS.Model.extend({
name: DS.attr('string'),
category: DS.belongsTo('category'),
description: DS.attr('string')
});
至于创建,在处理余烬对象时,应始终使用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 value=model.name}
而您的操作只需获取currentModel
并调用.save()
我最初使用的是category(没有_id),但我的后端API使用_id,我在序列化程序中用keyForRelationship>添加它,这对于检索记录很好,但是我不确定它是否用于存储,所以我试图检查是否是这导致了问题。我在索引模板的顶部有我的输入,该模板应该允许用户添加新问题,我不确定如何正确地构造它,我应该有一个问题/索引/新文件夹(我使用的是pods)您的后端是rails吗?后端是php lumen(基于laravel)