Я пытался создать индивидуальное приложение для ведения дел с возможностью добавления повторяющихся задач.
Мой первый подход состоял в том, чтобы использовать recurring_select спереди и логику ice_cube сзади. Мне удалось создать расписание со всеми желаемыми вхождениями, но проблема, с которой я столкнулся, заключается в том, что таким образом я больше не могу помечать повторяющуюся задачу как завершенную, поскольку отображается только ее вхождение.
Вот часть кода:
*task.rb*
class Task < ApplicationRecord
(...)
serialize :recurrence, Hash
def recurrence=(value)
# byebug
if value != "null" && RecurringSelect.is_valid_rule?(value)
super(RecurringSelect.dirty_hash_to_rule(value).to_hash)
else
super(nil)
end
end
def rule
IceCube::Rule.from_hash recurrence
end
def schedule(start)
schedule = IceCube::Schedule.new(start)
schedule.add_recurrence_rule(rule)
schedule
end
def display_tasks(start)
if recurrence.empty?
[self]
else
start_date = start.beginning_of_week
end_date = start.end_of_week
schedule(start_date).occurrences(end_date).map do |date|
Task.new(id: id, name: name, start_time: date)
end
end
end
end
*tasks_controller.rb*
class TasksController < ApplicationController
before_action :set_task, only: [:complete, :uncomplete, :show]
(...)
def index
(...)
@display_tasks = @tasks.flat_map{ |t| t.display_tasks(params.fetch(:start_date, Time.zone.now).to_date ) }
end
(...)
end
Мне было интересно, может быть, есть лучший способ подойти к этому, чем использовать драгоценные камни? Я читал о планировании рейк-задач, но я никогда не делал этого сам, поэтому я не уверен, что это правильный путь.
Заранее спасибо.