Похоже, вы задаете два вопроса одновременно:
- Запускать работу каждую неделю в определенное время.
Предложения Rails разные способы сделать это. Мне кажется, лучше всего подходит работа с активной библиотекой заданий.
Возможны следующие варианты:
Еще одна открытая библиотека для этого типа задач - гем delayed_job
. Он не очень эффективен, но его легко включить в небольшие проекты.
Цикл массива элементов.
Здесь вместо фактического перемещения элементов из вашего массива существует возможность сохранить задание, выполненное в вашей базе данных. Имейте в виду, что есть и другие возможности, которые не требуют, чтобы вы изменили свою базу данных. Следующий код не тестируется, но должен рассматриваться как псевдокод.
def run_job
last_aula_job = AulaJob.all.order(:created_at).last
classes = Aula.all.to_a
total = classes.count
p = last_aula_job.last_pointer % count
@this_week_classes = classes[p..p+1]
# do something with @this_week_classes
AulaJob.create(last_pointer: p + 2)
end