2017-01-29 9 views
1

У меня проблема с изготовлением hasMany < => принадлежит отношению к работе.Вам необходимо сдать модель в модель магазинаДля метода

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

Это что-то с ownTo: DS.belongsTo('article'), но я не мог понять, что это.

Вот мои файлы.

маршруты/статьи/show.js

import Ember from 'ember'; 
import RSVP from 'rsvp'; 

export default Ember.Route.extend({ 
    model(params) { 
    return RSVP.hash({ 
     article: this.store.find("article", params.id), 
     comments: this.store.query('comment', { articleId: params.id }) 
    }); 
    } 
}); 

контроллеры/статьи/show.js

import Ember from 'ember'; 

const { computed: { alias, readOnly } } = Ember; 

export default Ember.Controller.extend({ 
    article: alias('model.article'), 
    comments: alias('model.comments'), 
    length: readOnly('comments.length') 
}); 

шаблоны/статьи/show.hbs

<h3>Comments ({{comments.length}})</h3> 
{{#each comments as |comment|}} 
    <p>Author: {{comment.user.name}}</p> 
    <p>Somebody said: {{comment.body}}</p> 
{{/each}} 

адаптеры/comment.js

import ApplicationAdapter from './application'; 
export default ApplicationAdapter.extend({}); 

сериализаторы/comment.js

import DS from 'ember-data'; 

export default DS.RESTSerializer.extend({ 
    attrs: { 
    user: { embedded: 'always' }, 
    article: { embedded: 'always' } 
    } 
}); 

сериализаторы/article.js

импорта DS от 'Ember-данных';

export default DS.RESTSerializer.extend(DS.EmbeddedRecordsMixin, { 
    attrs: { 
    comments: { embedded: 'always' } 
    } 
}); 

модели/article.js

import DS from 'ember-data'; 
import Ember from 'ember'; 

const { attr, hasMany } = DS; 
const { computed: { gt } } = Ember; 

export default DS.Model.extend({ 
    title:  attr('string'), 
    content:  attr('string'), 

    authorName: attr('string'), 
    authorAvatar: attr('string'), 
    authorUrl: attr('string'), 

    comments:  hasMany('comment', {async: true}), 

    hasAvatar: gt('authorAvatar.length', 0) 
}); 

Edit:

Я добавил сюда код комментария модели, как просили в комментариях.

модели/comment.js

import DS from 'ember-data'; 

const { belongsTo, attr } = DS; 

export default DS.Model.extend({ 
    article: belongsTo(), 
    user: belongsTo(), 

    body: attr('string') 
}); 

А вот StackTrace от инспектора:

ember.debug.js:16905 Assertion Failed: You need to pass a model name to the store's modelFor method 
Error 
    at assert (http://ffl.com:8000/assets/vendor.js:16268:13) 
    at Object.assert (http://ffl.com:8000/assets/vendor.js:27196:34) 
    at assert (http://ffl.com:8000/assets/vendor.js:135212:37) 
    at Class.modelFor (http://ffl.com:8000/assets/vendor.js:145201:41) 
    at Class._internalModelForId (http://ffl.com:8000/assets/vendor.js:144337:29) 
    at Class._pushResourceIdentifier (http://ffl.com:8000/assets/vendor.js:145716:19) 
    at BelongsToRelationship.updateData (http://ffl.com:8000/assets/vendor.js:142394:36) 
    at BelongsToRelationship.push (http://ffl.com:8000/assets/vendor.js:142976:14) 
    at http://ffl.com:8000/assets/vendor.js:145795:20 
    at http://ffl.com:8000/assets/vendor.js:141943:18 
defaultDispatch @ ember.debug.js:16905 
dispatchError @ ember.debug.js:16888 
onerrorDefault @ ember.debug.js:30389 
trigger @ ember.debug.js:57833 
(anonymous) @ ember.debug.js:58717 
invoke @ ember.debug.js:339 
flush @ ember.debug.js:407 
flush @ ember.debug.js:531 
end @ ember.debug.js:601 
run @ ember.debug.js:724 
join @ ember.debug.js:746 
run.join @ ember.debug.js:21556 
hash.success @ rest.js:954 
fire @ jquery.js:3305 
fireWith @ jquery.js:3435 
done @ jquery.js:9242 
(anonymous) @ jquery.js:9484 
+0

У вас есть код, который вызывает метод 'modelFor' с пустыми аргументами?. Вы определили модель комментариев?если так, то это тоже?. если возможно, откройте трассировку стека для этой ошибки утверждения. для определения того, какой метод запускает 'modelFor'. последняя версия 'find' является закрытым методом. – kumkanillam

+0

@kumkanillam Я добавил оба, как вы просили. Надеюсь, что это поможет. –

+0

Не нужно ли указывать имя модели в отношениях belongsTo, например 'article: belongsTo ('article')' и 'user: attribTo ('user')' для модели комментариев. Я не уверен в этом. если это вам не поможет, вам может понадобиться пройти через формат данных ответа сервера. – kumkanillam

ответ

2

Я проверил вашу проблему и репо. Проблема заключалась только в компиляторе комментариев в Ember.js. Это должно быть:

import DS from 'ember-data'; 

export default DS.RESTSerializer.extend(DS.EmbeddedRecordsMixin, { 
    attrs: { 
    article: { embedded: 'always' }, 
    user: { embedded: 'always' } 
    } 
}); 
1

Я клонировал свой проект филиала рефакторинга-и-обновления-уголек, но мираж не делается. Поэтому я просмотрел код

headTags() { 
    let article = this.modelFor(this.routeName); 
} 

Это показано в статьях маршрутов, вы можете попробовать и удалить их и попробовать.

+0

Действительно, даже после удаления этой ошибки появляется эта ошибка - когда я подготовил вопрос, я удалил эти теги, чтобы быть уверенным - вот почему я упомянул в комментариях выше, что у меня не было 'modelFor', но я ценю ваш усилием, спасибо! –