2011-04-10 26 views
11

Ok, quindi in primo luogo non sono molto al corrente quando si tratta di Ruby, Rails, Mongo o anche ActiveRecord quindi mi scuso se queste domande sono abbastanza semplici. In primo luogo, ho un modello "Event" e ho aggiunto molte relazioni al mio modello "Comment". Ora è la mia comprensione (di base) di mongo (o di qualsiasi documento db) che le ricerche di chiavi straniere (o qualunque cosa vengano chiamate in mongo) non sono consigliate, optando invece per la memorizzazione il più possibile in un singolo documento. Con questo in mente mi aspetterei di avere un'unica collezione eventi con il commento JSON/BSON incorporato in ogni documento cioèComprendere MongoMappers molte relazioni

event: 

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

Invece sto vedendo che una collezione commenti è stato creato come pure la raccolta di eventi. Questo sarebbe il modo corretto per mappare questa relazione, in caso affermativo come posso interrompere la creazione della raccolta di commenti e inserire le informazioni direttamente nell'evento? La mia ipotesi è che devo dire al mio commento che mappatura non ha una proprietà _id e quindi non appartiene alla sua collezione.


EDIT: ho scoperto che quello che cercavo qui nella mia prima domanda era quello di utilizzare MongoMapper :: EmbeddedDocument invece di includere Documento MongoMapper ::


In secondo luogo, voglio gli utenti devono essere in grado di contrassegnare se stessi come "partecipanti" o semplicemente "interessati" a un evento, che presumo sarebbe stato modellato come una matrice di riferimento user_id sull'evento. Quindi inizialmente pensavo che sarebbe stato mappato come due "molti" rapporti, ma per quanto posso dire il nome della costante che sto passando al metodo molti è usato per creare il getter/setter, che non funzionerebbe per me se avessi due relazioni per lo stesso tipo.

In altre parole, se ho questa mappatura:

class Event 
    many :users 
end 

Poi è la mia comprensione che io poi avere getter e setter generati per la proprietà degli utenti. Così posso fare qualcosa di simile:

event.users << someAttendingUser

Questo è tutto il bene, ed a questo punto nel tempo ho avrebbe vuole il riferimento per l'utente di essere conservato e non l'intero BSON utente (a differenza di l'esempio dei commenti sopra). Ora il problema è: come faccio a fare questo quando ho due mappature alla collezione di utenti, come nel mio bisogno di utenti "partecipanti" e "interessati"?

Quindi, per riassumere questo vagante:

  • A volte mi desidera memorizzare molte relazioni direttamente come BSON nel documento orinal, e non come un riferimento a un documento in un'altra raccolta. Come faccio a fare questo?

  • A volte voglio memorizzare molte relazioni dello stesso tipo su un documento e voglio che siano riferimenti a un documento in un'altra raccolta. Come faccio a fare questo?

Spero che questo abbia senso, e mi scuso se sto chiedendo l'ovvio qui.


EDIT 2:

Ok, così ho fatto davvero di ricerca prima di questa domanda, ma sembra che ora ho trovato la risposta a entrambi i miei problemi così sarò a chiuderla me stesso.

La seconda parte mi ha richiesto di specificare un'opzione di nome di classe per la mappatura cioè

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

+8

Owen --- si dovrebbe spostare la risposta ad una risposta e ad accettare da soli –

+0

Si prega di fare come ha detto @JesseWolgamott così questo può scomparire dal mio feed. Cercando di aiutare gli altri e la tua domanda continua a spuntare. Grazie! – WattsInABox

risposta

2

Ok, beh ho fatto davvero di ricerca prima di questa domanda, ma sembra che ora ho trovato il rispondi ad entrambi i miei problemi, quindi chiuderò io stesso la domanda.

La seconda parte mi ha richiesto di specificare un'opzione di nome di classe per la mappatura cioè

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