2016-11-15 5 views
0

Ich bin on Rails eine Datenbank in Ruby Aufbau Mongoid verwenden, die die folgenden drei Sammlungen Residenz, Karte und Router umfasst:Wie fügt man Dokumente (ObjectId) zu has_many und has_and_belongs_to_many Beziehungen mit Ruby on Rails mit Mongoid?

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 

Ich habe derzeit einen Aufenthaltsdokument, ein Kartendokument und ein Router-Dokument. Meine Frage ist, wie man die Beziehungen has_many, objects_to und has_and_belongs_to_many zwischen den Dokumenten implementiert, so dass das Residenzdokument die _id des Routers und die _id der Karte referenziert, das Kartendokument die _id des Routers referenziert und der Router referenziert die _id der Karte.

Tut mir leid, wenn dies unklar ist, und danke für jede Hilfe!

Edit: Hier ist eine Erklärung der Beziehungen: Viele Karten (Anzeigen unterschiedlicher Daten) können für jede Residenz generiert werden. Jede Residenz hat einen Router, aber möglicherweise mehr als einen Router. Die Router sind in der Karte enthalten, sollten aber nicht eingebettet werden, da sie ohne Karte existieren können.

Antwort

0

ich denke, es sollte

sein
class Residence 
    has_many :routers 
    has_many :maps 
end 

class Map 
    has_many :routers 
end 

class Router 
    belongs_to :map 
end 

Wenn nicht, können Sie bitte die realen Beziehungen zwischen diesen Objekten erklären?

+0

Viele Karten (mit unterschiedlichen Daten) können für jede Residenz erstellt werden. Jede Residenz hat einen Router, aber möglicherweise mehr als einen Router. Die Router sind in der Karte enthalten, sollten aber nicht eingebettet werden, da sie ohne Karte existieren können. –

+0

Ich habe die Assoziationen basierend auf Ihrem Kommentar geändert. –

+0

Ich verstehe, wie Sie die Beziehungen in den Modellen definieren. Meine Frage ist, wie man Dokumente einfügt und spezifiziert, mit welchen Dokumenten es verwandt ist. –

Verwandte Themen