Ich habe versucht, eine benutzerdefinierte Aufgabenanwendung mit der Möglichkeit zu erstellen, wiederkehrende Aufgaben hinzuzufügen.Behandeln wiederkehrender Aufgaben in Rails
Mein erster Ansatz war die Verwendung von recurring_select auf der Vorderseite und ice_cube Logik auf der Rückseite. Es ist mir gelungen, einen Zeitplan mit allen gewünschten Vorkommen zu erzeugen, aber das Problem, das mir begegnet ist, ist, dass ich eine wiederkehrende Aufgabe nicht mehr als abgeschlossen markieren kann, da nur ihr Vorkommen angezeigt wird.
Hier ist ein Teil des Codes:
*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
ich mich gefragt, ob es vielleicht eine bessere Art und Weise zu nähern, als die Edelsteine mit? Ich habe gerade über das Planen von Rake-Aufgaben gelesen, aber ich habe es nie selbst gemacht, also bin ich mir nicht sicher, ob das auch der richtige Weg ist.
Vielen Dank im Voraus.
Danke @Nwocha. Bezüglich des zweiten Teils meiner Frage ergab sich das Problem daraus, dass der Eiswürfel-Zeitplan nur ein Element im Speicher anzeigt, nicht in Ihrer Datenbank, sondern immer mit der ursprünglichen Aufgabe verknüpft ist. Daher können Sie die Attribute des Vorkommens nicht aktualisieren . Ich endete mit ActiveJob und die Eiscube Zeitplan Informationen nur für die bedingte Planung Task-Duplizierung verwenden. –