#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"},
]
}
}