2017-02-22 1 views
0

I verwendet, unten an Code, um die Daten von JSON API Client senden deserialisieren,Wie Parameter mit Beziehungen mit ActiveModelSerializers deserialisieren?

def action_record_params 
    ActiveModelSerializers::Deserialization.jsonapi_parse!(params) 
end 

Wenn ich die folgenden Daten aus dem Client-Pass relationships Attribute der Deserialisierer nicht sehen kann.

Client senden Parameter

params = {"data": {"type": "action_record", "attributes": {"value": ""}}, "relationships": {"card": {"data": {"type": "card", "id": "#{card.id}"}}}} 

Server deserialisiert Daten

{:value=>""} 

Wie Deserialisieren Parameter mit Beziehungen ActiveModelSerializers mit?

+0

können Sie verwenden JSON.parse (params) – 1Rhino

+0

Ich habe einen TypeError 'keine implizite Umwandlung von ActionController :: Parameters in String'. –

Antwort

0

Base auf AMS-Dokumentation Deserialisierung Abschnitt, der unter

https://github.com/rails-api/active_model_serializers/blob/master/docs/general/deserialization.md

Die Beziehungen gefunden werden kann, kann only: [:relatedModelName] durch über die Option extrahiert werden. only fungiert in diesem Fall als Whitelist.

Beispieldaten

document = { 
    'data' => { 
    'id' => 1, 
    'type' => 'post', 
    'attributes' => { 
     'title' => 'Title 1', 
     'date' => '2015-12-20' 
    }, 
    'relationships' => { 
     'author' => { 
     'data' => { 
      'type' => 'user', 
      'id' => '2' 
     } 
     }, 
     'second_author' => { 
     'data' => nil 
     }, 
     'comments' => { 
     'data' => [{ 
      'type' => 'comment', 
      'id' => '3' 
     },{ 
      'type' => 'comment', 
      'id' => '4' 
     }] 
     } 
    } 
    } 
} 

AMS Deserialisierung mit Optionen

ActiveModelSerializers::Deserialization 
    .jsonapi_parse(document, only: [:title, :date, :author], 
          keys: { date: :published_at }, 
          polymorphic: [:author]) 

Output Hash

# { 
# title: 'Title 1', 
# published_at: '2015-12-20', 
# author_id: '2', 
# author_type: 'user' 
# } 
+0

Was ist, wenn ich eine gewisse Logik im Deserialisierungsprozess implementieren muss? Ich meine, wenn es ein Serialisierungsfall wäre, würde ich eine Serializer-Klasse erstellen, in der die serializable_hash-Methode überschrieben wird. Kann kein gutes Beispiel finden, um dasselbe für die Deserialisierung zu tun (vielleicht ist das nicht möglich?). Irgendwelche Hilfe bitte? – masciugo