Ember.js 余烬数据未保存外键,以空值发送

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') })

我的余烬应用程序没有将外键发送到后端

我有一个名为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看起来类别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)