记录已保存到服务器,但是响应没有ID,并且您的记录也没有

时间:2018-09-19 12:21:54

标签: ember.js rails-api

自昨天以来,我一直遇到此错误,错误:断言失败:“待办事项”已保存到服务器,但是响应没有ID,您的记录也没有。

我知道它应该来自app / serializers / todo.js或我的app / routes / application.js,但是在进入somes论坛后,我不得不问专家emberJs开发人员这个问题,因为我是新手:smiley :

这里是my app/serializers/todo.js

import DS from 'ember-data';

export default DS.JSONSerializer.extend({
  serialize: function(record, options) {
    var json = this._super.apply(this, arguments); // Get default serialization

    json.id = record.id;  // tack on the id

    return json;
  }
});

还有我的app/routes/application.js

import Route from '@ember/routing/route';

export default Route.extend({
  model(){
    return this.store.findAll('todo');
  },
    actions: {
      createtodo: function() {

        var titleInput = this.get("newTitle")
        var todo = this.store.createRecord('todo', {
          title: titleInput,
          isCompleted: false
        }); 

        this.set('newTitle', '');
        todo.save();
      }
    }
});

createtodo动作的触发方式app/templates/application.hbs

{{input type="text" id="new-todo" value=newTitle}}
<button {{action "createtodo"}}>Save</button>

因此我的objec已创建但未保存。当我查看余烬检查器时,我看到我创建的每个对象都有一个ID,但标题字段为null或“”。

这是一个TodoApp,背面为Rails-API,正面为Ember。

有人看到这里出什么问题了吗?

1 个答案:

答案 0 :(得分:0)

您的序列化器有问题。如果您使用的是某种标准的API设置,则根本不需要串行器。我先删除它。

可能发生的情况是您的API未设置为接收JSON-API文档,其结构如下:

{
  id: <id>,
  type: <type>,
  attributes: {
    name: <string>, 
    created: <date>,
    complete: <boolean>
   }
 }

因此,您应该在后端安装json-api gem或切换适配器以使用DS.RestSerializer,它具有完全平坦的数据结构。