谢谢你促使我回到这个话题。
这是我目前所拥有的。我不知道在最近对 Ember 和 Ember Data 的更新中是否可以删除其中的任何内容。
商店指定:
DS.RESTAdapter.configure("plurals", {
image: 'images',
gallery: 'galleries',
comment: 'comments'
});
DS.RESTAdapter.configure('App.Image', {
sideloadAs: 'images'
});
DS.RESTAdapter.configure('App.Comment', {
sideloadAs: 'comments'
});
App.store = DS.Store.create({
revision: 11,
adapter: DS.RESTAdapter.create({
mappings: {
comments: 'App.Comment'
}
})
});
如果您的数据是像图像和事物这样的普通单词,我相当确定您不需要复数定义。我的领域在概念上接近这些,但更具技术性。我选择使用这些名称发布,以使概念和关系更容易理解。
我的模型包含以下......以及所有其他常见的东西。
App.Gallery = DS.Model.extend({
images: DS.hasMany('App.Image',{key: 'images', embbeded: true})
});
App.Image = DS.Model.extend({
comments: DS.hasMany('App.Comment',{key: 'comments', embedded: true}),
gallery: DS.belongsTo('App.Gallery')
});
App.Comment = DS.Model.extend({
image: DS.belongsTo('App.Image')
});
这允许我返回一个 json 结构,就像我的问题中的那个:
{"comments":[...],"images":[...],"galleries":{"id":1,...,"images":[1,2,3]}}
这是使用 ActiveModelSerializers 从 Rails 生成的。我的序列化程序如下所示:
class ApplicationSerializer < ActiveModel::Serializer
embed :ids, :include => true
end
class GallerySerializer < ApplicationSerializer
attributes :id, ...
root "gallery"
has_many :images, key: :images, root: :images
end
class ImageSerializer < ApplicationSerializer
attributes :id, ...
root "image"
has_many :comments, key: :comments, root: :comments
end
class CommentSerializer < ApplicationSerializer
attributes :id, ...
end
再次。我认为你可以不那么冗长。我的 Rails 模型并不简单,称为“Gallery”。它们以“BlogGallery”之类的名称分隔,但我不希望 Ember 必须处理所有这些。出于这个原因,我需要关键和根本的东西。
我认为这涵盖了我所有关于关联并将它们嵌入到相同的 json 响应中。