【问题标题】:Ember data has many relationshipsEmber 数据有很多关系
【发布时间】:2013-02-28 23:50:33
【问题描述】:

这是一个关于我的理解的问题。

在 Rails 中,当您在两个模型(父模型和子模型)之间设置 has_many-belongs_to 关联时,id 仅存储在子模型上。如果要查找孩子的父母,则使用孩子的 id 查询数据库。为了找到所有的父母子女,数据库将查询所有具有与当前父母匹配的 parent_id 的记录。 Rails 是我的后端,所以这就是 ember-data 与之交互的对象。

ember-data 中的关联似乎需要双向设置,并且两个模型上都需要存在 ID。具有 has_many 关系的模型应该有一个包含其子 ID 的数组。但是,这并不存储在服务器端。

客户端使用 ember,我需要能够列出父母的孩子。但是,如果不遍历每个父母的所有孩子,我就无法访问它。

这里有一个根本的不匹配,我只是想确保我正确地实现了我的应用程序。我的 ajax 应该返回每个父母的 id 数组还是应该在客户端填写这些?

【问题讨论】:

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


    【解决方案1】:

    严格来说,在 JSON 中为 hasMany 关系包含 ids 数组是可选的。在实践中它是必不可少的,因为没有它,Ember-Data 将只能找到那些已经加载的相关记录。

    例如,如果你有

    App.Post = DS.Model.extend({
      comments: DS.hasMany('App.Comment')
    });
    
    App.Comment = DS.Model.extend({
      post: DS.belongsTo('App.Post')
    });
    

    并且您在post JSON 中省略了comment_ids 数组,那么您将需要手动调用App.Comment.find() 来加载所有cmets,然后post.get('comments') 将被保证包含与给定@ 关联的所有cmets 987654329@。

    如果您在 post 的 JSON 中包含 comment_ids 数组,则 Ember-Data 将对其尚未加载的 cmets 发出后续请求。

    【讨论】:

    • 好的,所以设置 JSON 响应以包含 ID 似乎很简单。保存回服务器怎么样?客户端会发送 cmets 数组只是为了被忽略还是可以阻止发送它?
    • 默认情况下,Ember-data 仅当关系配置为嵌入在序列化程序中时才包含 cmets 数组。请查看this question 了解更多信息。
    • 完美。因此,与往常一样,默认值似乎已经满足了我的需要。余烬(和数据)三天后,不得不说我很喜欢它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多