Встраивание идентификаторов с помощью активных сериализаторов моделей исключает имена ключей при использовании составных первичных ключей

#ruby-on-rails #ruby-on-rails-4 #composite-primary-key #active-model-serializers

#ruby-on-rails #ruby-on-rails-4 #composite-primary-key #active-model-serializers

Вопрос:

Я использую составные первичные ключи на своем сервере Ruby On Rails API. Я также использую активные сериализаторы моделей для управления сериализацией моих моделей. Я хотел бы использовать эту embed: :ids функцию в моем сериализаторе для встраивания своих идентификаторов. Это работает с составными первичными ключами, но дает только значения идентификатора. Поскольку для одной записи существует несколько идентификаторов, невозможно узнать, какое значение принадлежит какому столбцу.

Мой сериализатор

 class PostSerializer < ActiveModel::Serializer
  attributes :id, :title, :body
  has_many :comments, embed :ids
end
 

Результирующий JSON

 {
  "post": {
    "id": 1,
    "title": "New post",
    "body": "A body!",
    "comment_ids": [ [1, "v1"], [1, "v2"], [2, "v1"] ]
  }
}
 

Ответ №1:

Я смог обойти эту проблему, используя опцию Active Model Serilizer embed_key вместе с методом Composite Primary Key ids_hash .

Мой сериализатор

 class PostSerializer < ActiveModel::Serializer
  attributes :id, :title, :body
  has_many :comments, embed :ids, embed_keys: :ids_hash
end
 

Результирующий JSON

 {
  "post": {
    "id": 1,
    "title": "New post",
    "body": "A body!",
    "comment_ids": [
      {"comment_id": 1, "version_id": "v1"},
      {"comment_id": 1, "version_id": "v2"},
      {"comment_id": 2, "version_id": "v1"},
    ]
  }
}