Usando Mongoid, vamos a decir que tengo las siguientes clases:¿Cómo hacer referencia a un documento incrustado en Mongoid?
class Map
include Mongoid::Document
embeds_many :locations
end
class Location
include Mongoid::Document
field :x_coord, :type => Integer
field :y_coord, :type => Integer
embedded_in :map, :inverse_of => :locations
end
class Player
include Mongoid::Document
references_one :location
end
Como se puede ver, estoy tratando de modelar un entorno de mundo del juego simple donde un mapa incrusta lugares, y un jugador hace referencia a un solo lugar como su lugar actual.
uso de este enfoque, estoy recibiendo el siguiente error cuando intento hacer referencia a la "localización" atributo de la clase de jugador:
Mongoid::Errors::DocumentNotFound: Document not found for class Location with id(s) xxxxxxxxxxxxxxxxxxx.
Mi opinión es que esto es debido a que el documento de ubicación está incrustado decisiones es difícil hacer referencia fuera del alcance de su documento de incrustación (el Mapa). Esto tiene sentido, pero ¿cómo puedo modelar una referencia directa a un documento incrustado?
Creo que no necesita almacenar el ID del mapa por separado: 'Maps.where ('locations._id' => player.location_id)' - simplemente asegúrese de configurar los índices adecuados (index maps by ' locations._id ') – colllin
Oh, aún necesitaría encontrar manualmente el objeto de ubicación incrustado, pero al menos ya no depende de esa ubicación que pertenece a un mapa en particular. No estoy seguro si eso es un problema. – colllin