Понимание MongoMappers много отношений
Итак, во-первых, я не очень осведомлен о Ruby, Rails, Mongo или даже ActiveRecord, поэтому я прошу прощения, если эти вопросы достаточно просты. Во-первых, у меня есть модель "Событие", и я добавил много связей в свою модель "Комментарий". Теперь мое (базовое) понимание монго (или любого другого дБ документа) заключается в том, что поиск внешних ключей (или как они называются в монго) не рекомендуется, вместо этого я предпочитаю хранить как можно больше в одном документе. Имея это в виду, я ожидал бы иметь одну коллекцию Events с комментарием JSON/BSON, встроенную в каждый документ, т.е.
event:
{
Title: "some event"
Comments : [
{ user_id: [object id], comment: "comment"},
{ user_id: [object id], comment: "other comment"}
]
}
Вместо этого я вижу, что создана коллекция комментариев, а также коллекция событий. Будет ли это правильным способом отобразить эту связь, если да, то как мне остановить создание коллекции комментариев и вместо этого вставить информацию непосредственно в событие? Я предполагаю, что я должен указать в своем отображении комментариев, чтобы оно не имело свойства _id и, следовательно, не принадлежало его собственной коллекции.
РЕДАКТИРОВАТЬ: я обнаружил, что то, что я искал здесь в моем первом вопросе, было использовать MongoMapper::EmbeddedDocument вместо включения MongoMapper::Document
Во-вторых, я хочу, чтобы пользователи могли помечать себя как "посещающих" или просто "заинтересованных" в событии, которое, как я предполагал, будет смоделировано как массив ссылок user_id на событие. Поэтому я изначально думал, что это будет отображено как два "многих" отношения, но, насколько я могу судить, имя константы, которую я передаю методу "многие", используется для создания метода получения / установки, который не будет работать для меня если бы у меня было два много отношений для одного и того же типа.
Другими словами, если у меня есть это отображение:
class Event
many :users
end
Тогда я понимаю, что тогда я получу методы получения и установки для свойства users. Так что я могу сделать что-то вроде:
event.users << someAttendingUser
Это все хорошо, и на данный момент я бы хотел, чтобы ссылка на пользователя сохранялась, а не на весь пользовательский BSON (вотличие от приведенного выше примера комментариев). Теперь проблема в том, как мне это сделать, когда у меня есть два сопоставления с коллекцией пользователей, как с моей потребностью как в "посещающих", так и в "заинтересованных" пользователях?
Итак, подведем итог этого бессвязного:
Иногда я хочу сохранить многие отношения непосредственно как BSON в оригинальном документе, а не как ссылку на документ в другой коллекции. Как мне это сделать?
Иногда я хочу сохранить много связей одного типа в документе и хочу, чтобы они были ссылками на документ в другой коллекции. Как мне это сделать?
Надеюсь, что это имело смысл, и я прошу прощения, если я спрашиваю об очевидном здесь.
РЕДАКТИРОВАТЬ 2:
Хорошо, я действительно действительно искал, прежде чем задавать этот вопрос, но похоже, что теперь я нашел ответ на обе мои проблемы, поэтому я сам закрою вопрос.
Вторая часть потребовала, чтобы я указал опцию имени класса для отображения, т.е.
class Event
many :attendees, :class_name => "User"
many :interested, :class_name => "User"
end
1 ответ
Хорошо, я действительно действительно искал, прежде чем задавать этот вопрос, но похоже, что теперь я нашел ответ на обе мои проблемы, поэтому я сам закрою вопрос.
Вторая часть потребовала, чтобы я указал опцию имени класса для отображения, т.е.
class Event
many :attendees, :class_name => "User"
many :interested, :class_name => "User"
end