1

これは私にとって何度も発生しているようで、対処方法についてアドバイスが必要でした. 私はコーヒースクリプトで例を書いているので、私を許してください。

App.Post = DS.Model.extend
    title: DS.attr('string')
    author: DS.belongsTo('App.Author')

App.Author = DS.Model.extend
    name: DS.attr('string')
    posts: DS.hasMany('App.Post')

著者と関連する投稿を同時に作成したい。

author = App.Author.createRecord({name: 'waldo'});

author.get('posts').createRecord({title: 'how to do the Ember'})

代わりに

post = App.Post.createRecord({author: author})

問題は、サーバー上の Post モデルが author_id の存在を検証することです。そのため、 を呼び出すとstore.commit()author正常に送信されますpostが、拒否されます。post.get('author.id') //=> undefined

更新: Author モデルには、少なくとも 1 つの投稿を作成する必要があるというサーバー上の検証もあるためstore.commit()、投稿を作成する前に呼び出すことはできません。

トランザクションを台無しにして失敗しました。私はそれをいじり続けますが、これは将来の参考のためにS / Oで答えた良い質問のようです.

4

1 に答える 1

0

トランザクションでそれを行う必要がありますか? App.store.commit()そうでない場合は、事後記録を作成者に追加する前に呼び出すことができます。これで問題が解決しない場合は、非同期の問題が発生している可能性があります。その場合、Author-モデルのdidCreateイベントに接続できます。そのイベントが発生すると、レコードがサーバー上に作成され、モデルに ID が必要になります。この段階で投稿を追加すると、サーバーは文句を言わないはずです。

于 2012-10-24T06:00:41.970 に答える