Добавлен к существующим EmbeddedDocuments в MongoMapper.

Возьмите следующие документы MongoMapper.

class Schedule
  include MongoMapper::Document

  key :name, String
  key :description, String
  key :active, Boolean

  many :periods

  timestamps!
  userstamps!
end

class Period
  include MongoMapper::EmbeddedDocument

  key :number, Integer
  key :descriptor, String
  key :begin, Time
  key :end, Time
end

Кроме того, воспользуйтесь следующей маршрутизацией Падрино.

post :period, :map => '/schedule/period' do
  s = Schedule.first(params[:id])
  s.periods = [
    :number => 1,
    :descriptor => "This is a description.",
    :begin => Time.now,
    :end => Time.now
  ]
end

Но если у меня уже есть несколько periods в расписании, не буду ли я просто перезаписывать существующие periods? Как я могу этого избежать?


person Ethan Turkeltaub    schedule 05.06.2011    source источник


Ответы (1)


Увы, методы ассоциации еще не задокументированы на mongomapper.com. Но...

Используйте оператор concat, который определен для ассоциаций:

s.periods << {
  :number => 1,
  :descriptor => "This is a description.",
  :begin => Time.now,
  :end => Time.now
}

Вы можете передать ему либо хэш, либо документ.

person Brian Hempel    schedule 06.06.2011
comment
Ах! Именно то, что я искал! Спасибо! - person Ethan Turkeltaub; 06.06.2011