【问题标题】:ember nested resource FK value on createember 嵌套资源 FK 值在创建时
【发布时间】:2012-11-11 16:29:03
【问题描述】:

我是 ember 的新手,从昨天开始我就一直在摸索。 我想使用带有序列化程序的 ember 和 rails 制作一个简单的博客示例。

我已经能够为帖子制作 CRUD,没问题。大部分代码都在路由器中。

我的 cmets 有这样声明的问题:

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)    

显示帖子的 cmets 是可以的,路线看起来像:/#/posts/:id/cmets。

新评论链接在 cmets 列表的底部,因此创建新评论的路径是:

/#/posts/:id/cmets/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 值也是正确的。

我一定错过了什么,但我不知道是什么.....

菲利普

【问题讨论】:

    标签: ruby-on-rails ember.js ember-data


    【解决方案1】:

    您应该在评论上设置帖子,而不是通过post_id 属性。

    是的,post_id 是您的服务器和 Ember Data 将如何序列化关联的外键的方式,但这是 Ember Data 想要从您那里抽象出来的一个细节。在与模型交互时,您不应该知道或关心关联数据(或任何数据,实际上)是如何由 Ember Data 序列化并传递给服务器的。 (事实上​​,与 Rails 不同,post_id 永远不会作为属性存在于您的 Comment 记录中。)

    相反,您应该简单地与模型中定义的属性和关联进行交互。如果您有一个 Comment 模型与 post 关联,那么只需使用 comment.set('post', post)。它的行为类似于 Rails 中的 comment.post = post,为您处理所有细节。

    【讨论】:

    • 谢谢你的回答,因为这是一个周末的空闲时间项目,我在一周内没有积极地工作,但两天前我在考虑它的时候有点相同的 id。我会尝试让它以这种方式工作,这显然是正确的方式!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-15
    • 2014-07-19
    • 1970-01-01
    • 1970-01-01
    • 2017-03-08
    • 2020-11-10
    • 1970-01-01
    相关资源
    最近更新 更多