J'ai essayé de créer une application de tâches personnalisée avec la possibilité d'ajouter des tâches récurrentes.Gestion de tâches récurrentes dans Rails
Ma première approche était d'utiliser recurring_select sur la face avant et la logique ice_cube à l'arrière. J'ai réussi à générer un planning avec toutes les occurrences désirées mais le problème que j'ai rencontré est que de cette façon je ne peux plus marquer une tâche récurrente comme complète, car c'est seulement son occurrence qui est affichée.
Voici une partie du code:
*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
Je me demandais s'il y a peut-être une meilleure façon de l'aborder que d'utiliser les pierres précieuses? Je lisais sur la planification des tâches de rake, mais je ne l'ai jamais fait moi-même, donc je ne suis pas sûr que ce soit la bonne façon de procéder.
Merci d'avance.
Merci @Nwocha. En ce qui concerne la deuxième partie de ma question, le problème provient du fait que la programmation de glaçons n'affiche qu'un élément présent dans la mémoire, pas dans votre base de données, mais renvoie toujours à la tâche d'origine, donc vous ne pouvez pas mettre à jour les attributs de l'occurrence . J'ai fini par utiliser ActiveJob et j'utilisais les informations de planification du cube de glace uniquement pour la planification conditionnelle de la duplication des tâches. –