Я предлагаю попробовать другую объектную модель. Вместо Events
и ChildEvents
вы можете рассматривать его как EventType
s и Event
s.
EventType # Has many Events
---------
name
# ...
Event # Belongs to EventType
-----
event_id
start_time
end_time
# ...
Тогда ваши операции редактирования будут значительно упрощены.
Найти предыдущее событие ...
Event.find(:first, :conditions => [
'event_type_id = ? AND start_time > ?',
event.type.id,
event.start_time],
:order => 'ASC'
)
Удалить событие и все последующие события этого типа ...
events_to_delete = Event.find(:all,
:conditions => [
'event_type_id = ? AND start_time >= ?',
event.event_type.id,
event.start_time
])
Event.destroy( all_events_to_delete.map { |event| event.id } )