Как добавить документы (ObjectId's) в отношения has_many и has_and_belongs_to_many, используя Ruby on Rails с Mongoid?

Я создаю базу данных в Ruby on Rails, используя Mongoid, которая включает в себя следующие три коллекции: Residence, Map и Router:

residence.rb

class Residence
  include Mongoid::Document
  include Mongoid::Timestamps
  include Mongoid::Geospatial

  has_many :maps, inverse_of: :residence
  has_many :routers, inverse_of: :residence

  field :address, type: String
  field :resident, type: String

end

map.rb

class Map
  include Mongoid::Document
  include Mongoid::Timestamps
  include Mongoid::Geospatial

  belongs_to :residence, inverse_of: :maps
  has_and_belongs_to_many :routers, inverse_of: :maps
  embeds_many :pins

  field :name, type: String

  spatial_index "pins.loc"

end

router.rb

class Router
  include Mongoid::Document
  include Mongoid::Timestamps
  include Mongoid::Geospatial

  belongs_to :residence, inverse_of: :routers
  has_and_belongs_to_many :maps, inverse_of: :routers

  field :loc, type: Point
  field :MAC, type: String
  field :name, type: String
  field :serial, type: String

  spatial_index :loc

end

В настоящее время у меня есть один документ места жительства, один документ карты и один документ маршрутизатора. Мой вопрос заключается в том, как реализовать отношения has_many, assign_to и has_and_belongs_to_many между документами, чтобы документ резидентности ссылался на _id маршрутизатора и _id карты, документ карты ссылается на _id маршрутизатора и ссылки на маршрутизатор _id карты.

Извините, если это неясно, и спасибо за любую помощь!

Изменить: Вот объяснение отношений: Многие карты (отображающие различные данные) могут быть созданы для каждого места жительства. В каждой резиденции есть маршрутизатор, но может быть несколько маршрутизаторов. Маршрутизатор (ы) включен в карту, но не должен быть встроен, так как он может существовать без карты.

1 ответ

Я думаю, это должно быть

 class Residence
   has_many :routers
   has_many :maps
 end

 class Map
   has_many :routers
 end

 class Router
   belongs_to :map
 end

Если нет, не могли бы вы объяснить реальные отношения между этими объектами?

Другие вопросы по тегам