2017-02-22 3 views
0

Я использовал код ниже десериализации JSON данные API отправить от клиента,Как десериализовать параметры с помощью связей с помощью ActiveModelSerializers?

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

Когда я прохожу следующие данные от клиента, десериализатор не может видеть relationships атрибуты.

параметр посыла Client

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

Сервер десериализованное данные

{:value=>""} 

Как десериализации параметров с помощью отношения ActiveModelSerializers?

+0

Вы можете использовать JSON.parse (PARAMS) – 1Rhino

+0

У меня есть TypeError 'no implicit conversion of ActionController :: Parameters in String'. –

ответ

0

Основание на AMS документации Десериализация раздела, которые могут быть найдены ниже

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

Отношения могут быть извлечены с помощью с помощью опции only: [:relatedModelName]. only действует как белый список в этом случае.

Примеры данных

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 десериализации с опциями

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

Выход хэш

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

Что делать, если мне нужно реализовать некоторую логику в процессе десериализации. Я имею в виду, если бы это был случай сериализации, я бы создал класс Serializer, где переопределял метод serializable_hash. Не удается найти хороший пример, чтобы сделать то же самое для десериализации (возможно, это невозможно?). Любая помощь, пожалуйста? – masciugo

Смежные вопросы