私はエンバーの初心者で、昨日から頭を悩ませています。シリアライザーで ember と rails を使用して、簡単なブログの例を作成したいと思います。
投稿の CRUD を作成できましたが、問題ありません。ほとんどのコードはルーターにあります。
次のように宣言されているコメントに問題があります。
App.Comment = DS.Model.extend
body: DS.attr('string')
post: DS.belongsTo('App.Post')
App.Post = DS.Model.extend
title: DS.attr('string')
body: DS.attr('string')
comments: DS.hasMany('App.Comment',embedded: true)
投稿のコメントを表示することは問題ありません。ルートは /#/posts/:id/comments のようになります。
新しいコメントのリンクはコメント リストの一番下にあるため、新しいコメントを作成する方法は次のとおりです。
/#/posts/:id/comments/new
その時点で私は問題にぶつかりました:どの投稿がそのコメントを所有しているかをember-dataに伝えるにはどうすればよいですか?つまり、それを行うためのベストプラクティスは何ですか?
最後に、フォームを表示する前に comment.post_id を初期化し、ルーターでコーディングすることにしました。次のようになります。
create: Em.Route.extend
route: '/new'
connectOutlets: (router, context) ->
transaction = router.get('store').transaction()
comment = transaction.createRecord(App.Comment)
comment.set('post_id', router.get('postController').get('id'))
router.get('applicationController').set('transaction', transaction)
router.get('commentsController').connectOutlet
viewClass: App.EditCommentView
controller: router.get('commentController')
context: comment
save: (router, event) ->
router.get('applicationController.transaction').commit()
router.transitionTo('index')
しかし、サーバーに戻ると、post リクエストには post_id の値がありません。
フォームに post_id の入力フィールドを追加して、保存する前に値を確認しようとしましたが、値はそこにあり、正しいです。
フォームが送信されたときに起動されるルーターの保存機能をデバッグしようとしました。ここでも post_id の値は正しいです。
私は何かが欠けているに違いないのですが、何がわからないのですか.....
フィリップ