これに戻るように促してくれてありがとう。
これが私が現在持っているものです。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
また。あまり冗長でなくても済むと思います。私のレールモデルは「ギャラリー」と呼ばれる単純なものではありません。それらは「BlogGallery」のような名前で区切られていますが、Ember にそのすべてを処理させたくありませんでした。このため、キーとルートのものが必要です。
アソシエーションとそれらを同じjsonレスポンスに埋め込むことに関して、私が持っているすべてをカバーしていると思います。