Понимание MongoMappers много отношений - PullRequest
11 голосов
/ 10 апреля 2011

Хорошо, во-первых, я не очень хорошо осведомлен, когда дело доходит до Ruby, Rails, Mongo или даже ActiveRecord, поэтому я прошу прощения, если эти вопросы довольно простые.Во-первых, у меня есть модель «Событие», и я добавил много связей в свою модель «Комментарий».Теперь мое (базовое) понимание монго (или любого дБ документа), что поиск внешнего ключа (или как они называются в монго) не рекомендуется, вместо этого я предпочитаю хранить как можно больше в одном документе.Имея это в виду, я ожидал бы иметь одну коллекцию Events с JSON / BSON Comment, встроенную в каждый документ, т.е.

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 Ответ

2 голосов
/ 27 октября 2011

Хорошо, я действительно провел поиск, прежде чем задавать этот вопрос, но похоже, что теперь я нашел ответ на обе мои проблемы, поэтому я сам закрою вопрос.

Вторая часть потребовала, чтобы я указал опцию имени класса для сопоставления, т.е.

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