2013-11-24 2 views
0

Я получаю это сообщение при попытке сохранить новую запись. Я воссоздал пошаговое руководство на веб-сайте SmashingMag. Я использую данные ember v0.14. Глядя на коммиты, кажется, что две другие имеют ту же проблему (возможно, связанную с RESTAdapter). Может ли кто-нибудь дать ответ, почему?Uncaught TypeError: у пользователя объекта нет метода '_create'

App = Ember.Application.create({}); 
App.Store = DS.Store.extend(); 

App.User = DS.Model.extend({ 
    first_name: DS.attr('string'), 
    last_name: DS.attr('string'), 
    email: DS.attr('string'), 
    password: DS.attr('string'), 
    created_at: DS.attr('string'), 
    updated_at: DS.attr('string'), 

    fullName: function() { 
     return this.get('first_name') + ' ' + this.get('last_name'); 
    }.property('first_name','last_name') 
}); 

App.Router.map(function(){ 
    this.resource('users',function(){ 
     this.resource('user', {path: '/:user_id'}, function(){ 
      this.route('edit'); 
     }); 
     this.route('create'); 
    }); 
}); 

App.IndexRoute = Ember.Route.extend({ 
    redirect: function() { 
     this.transitionTo('users'); 
    } 
}); 

App.UsersRoute = Ember.Route.extend({ 
    model: function() { 
     return this.store.find('user'); 
    } 
}); 

App.UserRoute = Ember.Route.extend({ 
    model: function(params) { 
     return this.store.find('user', params.user_id); 
    } 
}); 

App.UserEditRoute = Ember.Route.extend({ 
    model: function() { 
     return this.modelFor('user'); // get the same model as the UserRoute 
    } 
}); 

App.UsersCreateRoute = Ember.Route.extend({ 
    model: function(){ 
     // the model for this route is a new empty Ember.Object 
     return Em.Object.create({}); 
    }, 

    // in this case (the create route) we can re-use the user/edit template 
    // associated with the usersCreateController 
    renderTemplate: function(){ 
     this.render('user.edit', { 
      controller: 'usersCreate' 
     }); 
    } 
}); 

App.UsersController = Ember.ArrayController.extend({ 
    sortProperties: ['first_name'], 
    sortAscending: true, 
    usersCount: function() { 
     return this.get('model.length'); 
    }.property('@each') 
}); 

App.UserController = Ember.ObjectController.extend({ 
    deleteMode: false, 

    actions: { 
     edit: function() { 
      // we need transitionToRoute because we are in a controller, otherwise it's transitionTo when in a route 
      this.transitionToRoute('user.edit'); 
     }, 
     delete: function() { 
      this.toggleProperty('deleteMode'); 
     }, 
     cancelDelete: function() { 
      this.set('deleteMode',false); 
     }, 
     confirmDelete: function() { 
      this.get('model').deleteRecord(); 
      this.get('model').save(); 
      this.transitionToRoute('users'); 
      this.set('deleteMode',false); 
     } 
    } 
}); 

App.UserEditController = Ember.ObjectController.extend({ 
    actions: { 
     save: function() { 
      var user = this.get('model'); 
      user.save(); 
      this.transitionToRoute('user',user); 
     } 
    } 
}); 

App.UsersCreateController = Ember.ObjectController.extend({ 
    needs: ['user'], 

    actions: { 
     save: function() { 
      // just before saving, we set the creationDate 
      this.get('model').set('creationDate', new Date()); 
      // create a new user and save it 
      var newUser = this.store.createRecord('user', this.get('model')); 
      newUser.save(); 

      // redirects to the user itself 
      this.transitionToRoute('user', newUser); 
     } 
    } 
}); 
+0

Просто из любопытства, есть ли причина, по которой вы не используете бета-версию ED 1.0? – Kingpin2k

+0

Потому что похоже, что ты. – Kingpin2k

+0

Не располагайте большим опытом работы с ember.js. В любом случае, сравнивая ваш код с [ember get started guide] (http://emberjs.com/guides/getting-started/creating-a-new-model/), похоже, вы используете 'this.store.createRecord()' в неправильном месте. Следующее руководство я бы поместил в 'App.UsersController = Ember.ArrayController.extend ({'. Но это просто догадаться. –

ответ

3

Похоже, ответ был вам необходимо обновить Ember данных 1.0, рад, что это было так просто;)

3

У меня была такая же проблема, и попытался вокруг в течение нескольких часов. Я знал, что создание на модели не сработает, но я все равно попробовал, и появилось следующее сообщение об ошибке:

Ошибка при отсутствии: вы не должны звонить create на модель. Вместо этого вызовите createRecord с атрибутами, которые вы хотите установить.

Я предполагал, что это означает store.createRecord. Это то, что не работало до того, что я нашел в руководствах. Выключается вызов createRecord по модели работ.

TL; DR:

Для меня изменения

this.store.createRecord('user', ...); 

в

App.User.createRecord(...); 

решить эту проблему. Предполагая, что вы определили пользователя как подкласс DS.Model.

Edit:

Эта нить: Cannot create record after ember-data upgrade утверждает, что изменение было на самом деле наоборот. (См. Также: https://github.com/emberjs/data/blob/master/TRANSITION.md). Похоже, я использовал более старую версию 0.14 (вместо beta-realease 1.0) из ember-data. Я использую рубиновый «ember-rails-gem». Это может быть частью проблемы. Я пытаюсь убедиться, что сейчас получаю правильную версию данных ember. Как kingpin2k сказал раньше ...

Второе редактирование:

Да. Пожалуйста, проигнорируйте мой внутренний ответ! Если вы используете Тлеющие рельсы камень, как я, обновление Ember-данных может быть осуществлено путем:

rails generate ember:install --tag=v1.0.0-beta.4 --ember-data 

В противном случае загрузите последнюю версию вручную с сайта Ember.

Смежные вопросы