【问题标题】:Ember.js / Rails Nested JSONEmber.js / Rails 嵌套 JSON
【发布时间】:2013-12-29 07:20:15
【问题描述】:

我正在开发一个具有大量嵌套关系的基本 Ember / Rails 应用程序,例如:

class Release < ActiveRecord::Base
  has_many :tracks
end

当我点击 Releases 端点时,我得到了一些可爱的 JSON,如下所示:

{
  releases: [{
    id: 1,
    name: "Release Name",
    artist: "Artist Name",
    tracks: [{
      id: 1,
      name: "Track 1",
    },
    {
      id: 2,
      name: "Track 2",
    }]
  }]
}

我已经阅读了几乎所有可以在网络上找到的关于此的内容。如何将“Track”模型映射到 Ember,以便我可以同时显示发布及其轨道?

DS.hasMany? asyc:true? embedded:true?这些都不适合我。

版本:

  • Ember:1.4.0-beta.1+canary.011b67b8
  • Ember 数据:1.0.0-beta.5+canary.d9ce2a53
  • 车把:1.1.1
  • jQuery: 1.10.2

【问题讨论】:

  • 您使用的是哪个适配器?
  • 我在 DS.ActiveModelAdapter

标签: javascript ruby-on-rails json ember.js


【解决方案1】:

使用Active Model SerializerDS.RESTAdapter 对我有用

Rails 用户模型:

class User < ActiveRecord::Base
  has_many :photos
end

Rails 用户序列化器:

class UserSerializer < ActiveModel::Serializer
  attributes :id, :name
  has_many :photos, embed: :ids, key: "photos", include: true
end

(has_many 的参数的神奇之处。这意味着它们被添加为第二个数组而不是嵌入式数组,它还将关联的标题设置为 photos 这是 Ember 默认要求的)

这使得 Rails 返回的 JSON 格式如下:

{
  user: {
    id: 1,
    name: "Joe Bloggs",
    photos: [1,2]
  },
  photos: [
    {
      id: 1,
      imageSrc: "/photo1.jpg"
    },
    {
      id: 2,
      imageSrc: "/photo2.jpg"
    }
  ],
}

然后在 Ember 中我这样定义用户模型:

App.User = DS.Model.extend({
  photos: DS.hasMany('photo'),
  name: DS.attr("string")
});

最后我定义了一个加载用户模型的路由:

App.UserShowRoute = Ember.Route.extend({
    model: function(params){
    return this.store.find('user', params.user_id);
  }
});

【讨论】:

  • 成功了!谢谢Laurie - 实际上我几天前就知道了,但还没有时间更新我的帖子! "embed: :ids, key: "photos", include: true" 是关键!!
猜你喜欢
  • 2012-12-20
  • 2014-07-17
  • 2013-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多