私は EmberJS にかなり慣れていないので、私が取り組んでいる新しいアプリでいくつかの hasMany および多対多の関係を維持しようとして、夜のほとんどをいじっていました。
Ember Data を使用して、使用ActiveModelAdapter
している Rails バックエンドに接続していますActiveModelSerializers
私が使用している Ember と Ember Data の次のバージョンを使用しています。
DEBUG: -------------------------------
DEBUG: Ember : 1.6.0-beta.1+canary.d0f5f254
DEBUG: Ember Data : 1.0.0-beta.7+canary.d5562867
DEBUG: Handlebars : 1.1.1
DEBUG: jQuery : 1.10.2
DEBUG: -------------------------------
私が抱えている基本的な問題は、レコードを保存するときに、関連付け ID がサーバーに送り返されないことです。
ActiveModelSerializerのソースを調べたところ、hasMany のシリアル化がスキップされていることがわかりました
var ActiveModelSerializer = RESTSerializer.extend({ // ...
/**
Does not serialize hasMany relationships by default.
*/
serializeHasMany: Ember.K,
}
これまでのところ機能している次の基本的なソリューションを思いつきましたが、Ember の規則とベスト プラクティスに従うよりクリーンなソリューションがあるかどうか疑問に思っていました。
DS.ActiveModelAdapter.reopen
namespace: 'api/v1'
App.Store = DS.Store.extend
adapter: '-active-model'
App.ApplicationSerializer = DS.ActiveModelSerializer.extend
serializeHasMany: (record, json, relationship) ->
if relationship.options.async
key = relationship.key
data = record.get("data.#{key}")
if data?
json[@keyForRelationship(key, "hasMany")] = data.mapBy(Ember.get(this, "primaryKey"))
return