[英]Ember.js / Rails Nested JSON
我正在開發一個基本的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
嗎? 這些都不適合我。
版本:
以下使用Active Model Serializer和DS.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);
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.