5

私は 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
4

1 に答える 1

1

私の理解では、アクティブなモデル シリアライザーがスキップする理由は、バックエンドがそれを処理することを期待しているからです。リレーショナル データベースでは、has many の値は親レコードに明示的に保存されません。子に外部キーを保存するだけで十分です。よりクリーンなソリューションを求める場合 - おそらくActiveModelSerializerAPI に最適ではありません。

于 2014-09-12T10:40:04.617 に答える