7 Stimmen

Wie lassen sich wiederkehrende Aufgaben in Rails modellieren und speichern?

Cron-Lösungen in Rails sind zahlreich und ziemlich gut. Das ist nicht das, womit ich hier zu kämpfen habe.

Stattdessen, was ich mit Schwierigkeiten ist, lassen Benutzer ihre eigenen wiederkehrenden Aufgaben (wie Erinnerungen) erstellen - speziell, wie zu modellieren und speichern Sie diese in der DB (eine gute UI für es ist nicht trivial zu - wäre toll, wenn es Code gibt es für diese). Google Kalender ist hier ein gutes Beispiel (die UI zum Hinzufügen eines Ereignisses, nicht der gesamte Kalender) ... sie sollten in der Lage sein, täglich um 13 Uhr CST, oder Mo/Mi/Fr, oder wöchentlich, usw. zu tun. Welche Cron-Lösung auch immer verwendet wird, müsste dann die Datenbank abfragen, um zu sehen, welche Erinnerungen zu dieser Stunde gesendet werden müssen, usw.

Jemand gesehen ein gutes Plugin / Gem für diese in Schienen? Scheint, wie es wäre etwas da draußen für sie sein, aber ich habe es noch nicht gefunden.

Danke!

7voto

Brian Armstrong Punkte 19437

Da ich nichts besonders Ausgefallenes brauchte, habe ich meine eigene Lösung entwickelt.

Im Grunde habe ich eine next_run datetime und interval String-Spalte an die Datenbank, die eine von (Tag, Woche, usw.) war. Dann richten Sie einen Cron-Job ein, der nach allen next_run Daten, die bereits vergangen sind. Es führt sie aus und setzt dann next_run zu einem Zeitpunkt in der Zukunft auf der Grundlage der interval Spalte.

Einfach, aber für meine Bedürfnisse geeignet.

1voto

Brian Armstrong Punkte 19437

Derzeit denke ich über die Verwendung eines Plugins wie dieses, um Wiederholungen in einer Tabelle zu speichern http://github.com/fnando/recurrence/tree/master

jede Erinnerung würde ein Wiederholungsobjekt haben, und die Erinnerung würde auch ein Datumsfeld enthalten, wenn sie die nächste Erinnerung senden soll. Dann könnte der Cron...

get all reminder's whose "next_send" date has passed
for each reminder
  send it
  update the "next_send" field using the recurrence object
end

Wenn es bessere Lösungen gibt oder ich den falschen Weg eingeschlagen habe, bin ich für jeden Hinweis dankbar.

1voto

Benjamin Curtis Punkte 1500

Ich habe ical-Lösungen (den RFC, nicht das Programm) immer als den besten Ansatz für die Arbeit mit wiederkehrenden Ereignissen empfunden. Es gibt ein paar gute Ruby-Bibliotheken für den Umgang mit ical, und das neueste Kind auf dem Block ist ri_cal .

0voto

vmardian Punkte 33

Ich habe derzeit dieses Problem, und die Lösung, die ich in Erwägung ziehe, sieht folgendermaßen aus:

class AllowReoccuringTasks < ActiveRecord::Migration  
    def self.up  
        add_column :tasks, :reoccuring, :boolean  
        add_column :tasks, :period, :integer  
    end
end

wobei der Zeitraum entweder 1 (jeden Tag), 7 (jede Woche) oder 14 (jede zweite Woche) sein kann.

Wenn Sie andere Arten von Zeitplänen unterstützen möchten, wie z. B. jeden Monat, an Wochentagen, Wochenenden usw., könnten Sie stattdessen eine Spalte mit der Bezeichnung "Zeitplan" hinzufügen und Konstanten zur Darstellung der verschiedenen Zeitplantypen verwenden. Sie könnten auch die enum plugin .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X