2009-07-21 16 views
5

Cron-Lösungen in Schienen sind zahlreich und ziemlich gut. Damit kämpfe ich hier nicht.Wie können wiederkehrende Aufgaben in Schienen modelliert und gespeichert werden?

Stattdessen habe ich Probleme damit, Benutzer eigene wiederkehrende Aufgaben (wie Erinnerungen) erstellen zu lassen - speziell wie man diese in der DB modelliert und speichert (eine gute Benutzeroberfläche wäre auch nicht trivial) toll, wenn da Code dafür wäre). Google Kalender ist ein großartiges Beispiel hier (die Benutzeroberfläche, um ein Ereignis hinzuzufügen, nicht den gesamten Kalender) ... sie sollten täglich um 1 Uhr CST, oder Montag/Mittwoch/Freitag, oder wöchentlich, usw. Was auch immer Cron-Lösung ist benutzt zu werden, müsste dann die Datenbank abfragen, um zu sehen, welche Erinnerungen zu dieser Stunde gesendet werden mussten usw.

Wer hat ein gutes Plugin/Juwel dafür in Rails gesehen? Scheint so, als ob da draußen etwas wäre, aber ich habe es noch nicht gefunden.

Danke!

+0

Ich suche genau das Gleiche! Haben Sie eine Lösung für Ihr Problem gefunden? – Zabba

+0

siehe meine Antwort unten - gerollt meine eigene einfache Lösung –

Antwort

5

Ich landete meine eigene Lösung, da ich nichts super schick brauchte.

Grundsätzlich habe ich eine next_run datetime und interval String-Spalte zu der DB hinzugefügt, die eine von (Tag, Woche, etc) war. Dann richten Sie einen Cron-Job ein, der nach next_run Daten, die bestanden haben, sucht. Es führt sie aus und setzt dann next_run zu einem Punkt in der Zukunft basierend auf der Spalte interval.

Einfach aber funktionierte für meine Bedürfnisse.

1

denkt Zeit über ein Plugin wie dies mit Rezidiven in einer Tabelle speichern http://github.com/fnando/recurrence/tree/master

jede Erinnerung eine Wiederholung bezwecken würde, und die Erinnerung daran halten würde auch ein Datetime-Feld, wenn es es ist nächste senden angenommen hat. Dann könnte die 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 oder ich den falschen Weg nach unten geht, Eingang immer geschätzt.

1

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

+0

rical sieht gut aus und volle Funktionen, ich bin irgendwie verwirrt, wie es mit Schienen integrieren könnte. Werden Ereignisse oder Kalenderobjekte in der Datenbank gespeichert? Wie würdest du überfällige Ereignisse sehen oder Fragen stellen? Vielen Dank! –

+0

looking => look up –

+1

sieht leider aus wie rical lässt Sie nichts in der Datenbank speichern .... es ist nur zum Lesen/Generieren von ical-Dateien –

0

Ich habe dieses Problem derzeit und die Lösung, die ich angesichts bin ist wie folgt:

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

wo Zeitraum kann entweder 1 (jeden Tag), 7 (jede Woche) oder 14 (jede andere Woche).

Wenn Sie andere Arten von Zeitplänen wie jeden Monat, Wochentage, Wochenenden usw. unterstützen möchten, können Sie stattdessen eine Spalte namens "Zeitplan" hinzufügen und Konstanten verwenden, um verschiedene Zeitplantypen darzustellen. Sie könnten auch die enum plugin verwenden.

Verwandte Themen