6

So che Ember-Data dovrebbe essere compatibile con i serial serial del modello attivo, ma sembrano essere fuori fase nella serializzazione delle relazioni has_many con incorporato ID.has_many configuration per Serializzatori di modelli e Active Data con ID incorporati e sideloading

Ad esempio, il serializzatore

class PostSerializer < ActiveModel::Serializer 
    embed :ids 
    has_many :comments 
end 

produce il JSON

{ 
    "post": { 
     "comment_ids": [...] 
    } 
} 

Ma la configurazione predefinita in Ember dati,

App.Post = DS.Model.extend({ 
    DS.hasMany('App.Comment'), 
}); 

App.Comment = DS.Model.extend(); 

aspetta l'associazione commenti da serializzare come comments: [...] senza il suffisso _ids (vedere the relationships sub-section of the REST adapter section of the Ember.js guide).

ho provato quanto segue come un work-around:

class PostSerializer < ActiveModel::Serializer 
    attribute :comments 
    def comments 
    object.comment_ids 
    end 
end 

Funziona, ma aggiungendo embed :ids, :include => true al fine di consentire il caricamento laterale ora non fa nulla dal momento che AMS non sa che si tratta di un'associazione.

Edit: Sto usando il active_model_serializers (0.6.0) gemma e la revisione Ember-Data 11

risposta

7

Per brace-dati 1.0.0-beta.3 ho finito per usare questo:

App.ApplicationSerializer = DS.ActiveModelSerializer.extend({}); 

Come spiegato qui: Transition Guide

funziona molto bene!

3

si può provare a configurare la mappatura proprio nel adattatore sul lato client

DS.RESTAdapter.map('App.Post', { comments: { keyName: 'comment_ids' } }); 
+0

Questa è probabilmente la soluzione più ragionevole. – ahmacleod

2

sto usando active_model_serializers 0.6 .0 e ember_data 11. Non vedo il comportamento che stai segnalando.

mio serializzatore:

class CentreSerializer < ActiveModel::Serializer 
    embed :ids 

    attributes :id, :name 
    has_many :rooms 
end 

L'uscita del localhost: 3000/centri/1.json

{ 
    centre: { 
    id: 1, 
    name: "Centre0", 
    rooms: [ 
     1, 
     2, 
     3, 
     4, 
     5 
    ] 
    } 
} 

Nel mio caso l'applicazione rotaie sta producendo il JSON formata correttamente prima che faccia anche attraverso per tingere Non dovresti ricorrere alla mappatura sul lato client.

+0

In realtà stavo usando una build edge di AMS. Sembra che la serializzazione delle associazioni 'has_many' sia stata modificata di recente. – ahmacleod

+0

In tal caso, non puoi semplicemente usare la chiave: argomento come documentato su https://github.com/rails-api/active_model_serializers#associations? –

+0

Sì, anche quello è il trucco.Stavo cercando un'opzione del genere prima, ma l'ho trascurato. – ahmacleod

0

Sembra che this commit sia responsabile della situazione. Quando AMS è stato aggiornato per serializzare le associazioni has_one come association_id (portando AMS alla conformità con i dati ember), è stato modificato anche per serializzare le associazioni belongs_to come association_ids.

+0

Il problema è stato risolto in questa [richiesta pull] (https://github.com/emberjs/data/pull/727). – ahmacleod

Problemi correlati