为什么“断言失败:你只能为这种关系添加一个'故事'记录”?

时间:2013-11-30 17:10:19

标签: ember.js ember-data

我认为我不了解如何设置belongsTo关系。我正在使用 ember-1.1.2和ember数据beta3。任何帮助表示赞赏。

关系定义:

App.Story = DS.Model.extend({
    name: DS.attr('string'),
    description: DS.attr('string'),
    setting: DS.attr('string'),
    status: DS.attr('string'),
    chapters: DS.hasMany('chapter',{async: true}),
    cast: DS.hasMany('actor', {async: true})
 });

App.Chapter = DS.Model.extend({
    name: DS.attr('string'),
    number: DS.attr('number'),
    description: DS.attr('string'),
    story: DS.belongsTo('story'),
    scenes: DS.hasMany('scene',{async: true})
});

路线:

this.resource('story', {path: '/story'}, function() {
            this.route('edit', {path: '/:story_id'})
            this.route('new')
            this.resource('chapter', {path:"/:story_id/chapter"},   function() {
                    this.route('edit', {path: '/:chapter_id/edit'})
                    this.route('new')
                    this.resource('scene', {path:":chapter_id/scene"}, function() {
                            this.route('edit', {path: '/:scene_id/edit'})
                            this.route('new')
                    })
            })
    })

发生错误的地方:

App.ChapterNewRoute = Ember.Route.extend({

    setupController: function( controller, model) {
            this.controllerFor('chapter.edit').setProperties({isNew:true, content:model})
    },

    model: function(params) {
            var chapter = this.store.createRecord('chapter')
            this.store.find('story', params.story_id).then(function( story) {
                    chapter.set('story', story)  //ERROR HAPPENS HERE
                    story.get('chapters').push(chapter)
            })

            return chapter
    },

    renderTemplate: function() {
            this.render('chapter.edit')
    }
})

1 个答案:

答案 0 :(得分:1)

story_id在该路径的模型钩子中不存在,它只存在于ChapterRoute(又名story_id未定义,你可能没有得到故事)。您可以使用modelFor从章节的路径中获取模型,并从该模型中获取该模型(如果存在)。

这是一个显示工作的jsbin

http://emberjs.jsbin.com/OxIDiVU/1/edit