2009-07-21 15 views
5

Le soluzioni cron nei binari sono numerose e piuttosto buone. Non è quello con cui sto combattendo qui.Come modellare e memorizzare le attività ricorrenti nei binari?

Invece, quello che sto avendo problemi è lasciare che gli utenti creino le proprie attività ricorrenti (come i promemoria) - in particolare come modellare e archiviare questi nel DB (una buona interfaccia utente per esso non è banale - sarebbe fantastico se ci fosse il codice là fuori per quello). Il calendario di Google è un ottimo esempio qui (l'interfaccia utente per aggiungere un evento, non l'intero calendario) ... dovrebbero essere in grado di fare giornalmente alle 13:00 CST, o lunedì/mercoledì/venerdì, o settimanali, ecc. Qualunque sia la soluzione cron essere utilizzato avrebbe quindi bisogno di interrogare il database per vedere quali solleciti dovevano essere inviati a quell'ora, ecc.

Qualcuno ha visto un buon plugin/gemma per questo in rotaie? Sembra che ci sarebbe qualcosa là fuori, ma non l'ho ancora trovato.

Grazie!

+0

Sto cercando la stessa identica cosa! Hai trovato una soluzione al tuo problema? – Zabba

+0

vedi la mia risposta accettata qui sotto - ha lanciato la mia semplice soluzione –

risposta

5

Ho finito col rotolare la mia soluzione perché non avevo bisogno di niente di super elegante.

Fondamentalmente ho aggiunto un next_run datetime e interval colonna di stringa al db che era uno di (giorno, settimana, ecc.). Quindi impostare un cron job per eseguire l'aspetto di tutte le date next_run che sono state superate. Li esegue e quindi imposta next_run in un punto futuro in base alla colonna interval.

Semplice ma funzionante per le mie esigenze.

1

Attualmente pensando di usare un plugin come questo per memorizzare le recidive in una tabella http://github.com/fnando/recurrence/tree/master

ogni sollecito avrebbe un oggetto recidiva, e il promemoria sarebbe anche mantenere un campo datetime quando si suppone di inviare è prossimo. Poi il cron potrebbe ...

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 

Se ci sono soluzioni migliori o sto andando sulla strada sbagliata, ingresso sempre apprezzato.

1

Ho sempre trovato soluzioni iCal (RFC, non il programma) per essere l'approccio migliore per lavorare con eventi ricorrenti. Ci sono alcune buone librerie Ruby per trattare con ical, e il più nuovo capretto sul blocco è ri_cal.

+0

rical ha un aspetto fantastico e pieno di funzionalità, sono un po 'confuso su come potrebbe integrarsi con le guide. Memorizza gli eventi o gli oggetti del calendario nel database? Come guarderesti eventi scaduti o fare domande? Grazie! –

+0

looking => look up –

+1

purtroppo sembra rical non ti permette di salvare nulla nel database .... è solo per leggere/generare file ical –

0

Attualmente sto avendo questo problema e la soluzione che sto considerando è la seguente:

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

dove periodo può essere 1 (tutti i giorni), 7 (ogni settimana), o 14 (ogni altra settimana).

Se si desidera supportare altri tipi di programmi come ogni mese, giorni della settimana, fine settimana, ecc., È possibile invece aggiungere una colonna denominata "pianificazione" e utilizzare le costanti per rappresentare diversi tipi di pianificazione. È anche possibile utilizzare enum plugin.

Problemi correlati