检查model中是否已经存在记录(错误-适配器的响应没有任何数据)



我想做的是:如果用户尝试使用已经在模型中注册的用户名或电子邮件注册,用户将得到错误。

当我试图注册未注册的用户名(id)时,我得到了这个错误: Error: Assertion Failed: You made a request for a user with id kevin, but the adapter's response did not have any data 我正在调试控制台和阅读文档,但我不确定为什么我得到这个错误,请帮助我。

控制器 app/auth/register.js
var AuthRegisterController = Ember.ObjectController.extend({
  name:     null,
  username: null,
  email:    null,
  password: null,
  error:    null,
  actions: {
    register: function(){
      this.set('error', null);
      var userInfo = this.getProperties('name', 'username', 'email', 'password');
      ...
      if(this.store.find('user', userInfo.username)){
        return this.set('error', 'The username is already registered.');
      }
      if(this.store.find('user', {email: userInfo.email})){
        return this.set('error', 'The email is already registered.');
      }
      ...
    }
  }
});
export default AuthRegisterController;

用户模型结构: app/models/user.js

var User = DS.Model.extend({
  name: DS.attr('string'),
  email: DS.attr('string'),
  password: DS.attr('string'),
  posts: DS.hasMany('post'),
});
User.reopenClass({
  FIXTURES: [{
    id: 'will',
    name: 'Will Smith',
    email: 'will@example.com',
    password: 'password'
  }]
});
export default User;

Ember文档-查找记录

find是一个异步方法,它将总是立即返回一个承诺(又名所有这些if语句将执行)。使用烬数据来发现一个记录是否存在是多余的,没有意义。当用户输入系统中已经存在的用户名/电子邮件时,返回不同用户的用户信息是一个主要缺陷。这就是Ember Data的用途,记录管理,而不是这个记录是否存在。

话虽如此,只要在你的服务器上创建一个端点/available_user,允许你发布用户名/电子邮件,它会返回一个200,结果如{result:'ok'}{result:'duplicate email'}等。

var store = this.store;
...
var request = $.ajax({
    url:'/available_user',
    type:'POST',
    data: getProperties
});
request.then(function(results){
  if(results.ok){
    record = store.createRecord('user', getProperties); 
    record.save();
  }
});

相关内容

最新更新