2011-04-10 11 views
11

Ok, en primer lugar, no estoy muy al tanto cuando se trata de Ruby, Rails, Mongo o incluso ActiveRecord, así que me disculpo si estas preguntas son bastante básicas. En primer lugar, tengo un modelo de "Evento" y he agregado muchas relaciones con mi modelo de "Comentarios". Ahora es mi comprensión (básica) de mongo (o de cualquier documento db) que las búsquedas de claves externas (o como se llamen en mongo) no son aconsejables, en cambio opto por almacenar tanto como sea posible en un solo documento. Con esto en mente que se puede esperar a tener una sola colección de eventos con el comentario JSON/BSON incrustado en cada documento, es decirComprender MongoMappers many relationship

event: 

{ 
Title: "some event" 
Comments : [ 
    { user_id: [object id], comment: "comment"}, 
    { user_id: [object id], comment: "other comment"} 
] 
} 

En cambio, estoy viendo que una colección de comentarios ha sido creado, así como la recopilación de eventos. ¿Esta sería la forma correcta de mapear esta relación? En caso afirmativo, ¿cómo detengo la colección de comentarios creada y, en cambio, la información se incrustó directamente en el evento? Mi suposición es que tengo que decirle a mi asignación de comentarios que no tenga una propiedad _id y que por lo tanto no pertenezca a su propia colección.


EDIT: He descubierto que lo que yo estaba buscando aquí en mi primera pregunta fue utilizar MongoMapper :: EmbeddedDocument en lugar de incluir Documento MongoMapper ::


En segundo lugar, quiero los usuarios pueden marcarse a sí mismos como "asistentes" o simplemente "interesados" en un evento, que supuse se modelaría como una matriz de user_id de referencia en el evento. Inicialmente pensé que sería mapeado como dos "muchas" relaciones, pero por lo que puedo decir el nombre de la constante que estoy pasando a los muchos métodos se usa para crear getter/setters, lo que no me funcionaría si tuviera dos muchas relaciones para el mismo tipo.

En otras palabras, si tengo este mapeo:

class Event 
    many :users 
end 

entonces es mi entendimiento de que entonces tendré captadores y definidores generados por la propiedad usuarios. Así que puedo hacer algo como:

event.users << someAttendingUser

Todo esto es bueno, y en este punto en el tiempo que sería desea que la referencia a que el usuario puede almacenar y no todo el BSON usuario (a diferencia de el ejemplo de comentarios anterior). Ahora el problema es ¿cómo hago esto cuando tengo dos asignaciones para la colección de usuarios, como con mi necesidad de usuarios "asistentes" e "interesados"?

Entonces, para resumir esta laberíntica:

  • veces quiero almacenar muchas relaciones directamente como BSON en el documento orinal, y no como una referencia a un documento en otra colección. ¿Cómo hago esto?

  • A veces quiero almacenar muchas relaciones del mismo tipo en un documento y QUIERO que sean referencias a un documento en otra colección. ¿Cómo hago esto?

Espero que esto tenga sentido, y me disculpo si estoy preguntando lo obvio aquí.


EDIT 2:

Ok, así que realmente hice búsqueda antes de hacer esta pregunta, pero parece que he encontrado ahora la respuesta a mis dos problemas así que voy a cerrar la pregunta a mí mismo.

La segunda parte me requiere para especificar una opción de nombre de clase para el mapeo es decir

class Event 
    many :attendees, :class_name => "User" 
    many :interested, :class_name => "User" 
end 

+8

Owen --- debe mover la respuesta a una respuesta y aceptar usted mismo –

+0

favor hacer como lo ha dicho @JesseWolgamott esto puede desaparecer de mi alimentación. Tratar de ayudar a los demás y su pregunta sigue apareciendo. ¡Gracias! – WattsInABox

Respuesta

2

Ok, así que realmente tenía búsqueda antes de hacer esta pregunta, pero parece que he encontrado ahora la Responda a mis dos problemas, así que cerraré la pregunta yo mismo.

La segunda parte me requiere para especificar una opción de nombre de clase para el mapeo es decir

class Event 
    many :attendees, :class_name => "User" 
    many :interested, :class_name => "User" 
end