Как хранить embeds_many / embedded_in в mongoid как хэш вместо массива? - PullRequest
0 голосов
/ 12 декабря 2018

Поскольку я создаю новый API для существующей унаследованной системы, я пытаюсь выяснить, как моделировать отношения таким образом, который имеет смысл для ODM, но поддерживает ту же структуру хранения, которая уже существует.

Текущая структура хранится как:

{
  _id: ObjectId(),
  name: String,
  relationship_ids: {
    "5c06a0eb350e6ef20d1486b9" : {
        "id" : "5c06a0eb350e6ef20d1486b9", 
        "type" : "package"
    },
    "5ba105bf350e6e3f6ef97532" : {
        "id" : "5ba105bf350e6e3f6ef97532", 
        "type" : "something"
    }
 }
}

И я хотел бы смоделировать объект так, как если бы он был собственной моделью в Rails.Я подумал, что, возможно, есть способ сделать это, но я его нигде не вижу.

Я предполагаю, что мне нужен какой-то адаптер сериализации / десериализации или переопределить его специально на embedded_in do / * 1009.* область ... но не уверен.

ОБНОВЛЕНИЕ:

Я предполагаю, что это как-то связано с переопределением методов: https://docs.mongodb.com/mongoid/7.0/api/Mongoid/Association/Embedded/EmbedsMany/Proxy.html

НоЯ несколько новичок в этом и не знаю, где лучше всего разместить этот тип переопределения.

У кого-нибудь еще есть решение для этого?

1 Ответ

0 голосов
/ 12 декабря 2018

Возможно, вы можете использовать полиморфные ассоциации (см. документы"Полиморфизм"):

class Band
  include Mongoid::Document
  embeds_many :photos, as: :photographic
end

class Photo
  include Mongoid::Document
  embedded_in :photographic, polymorphic: true
end

class Image
  include Mongoid::Document
  embedded_in :photographic, polymorphic: true
end

Полиморфные отношения хранят как идентификатор, так и имя класса связанного документа.

...