2009-07-21 9 views
5

Las soluciones de Cron en rieles son numerosas y bastante buenas. Eso no es con lo que estoy luchando aquí.Cómo modelar y almacenar tareas recurrentes en rieles?

En cambio, lo que estoy teniendo problemas es dejar que los usuarios creen sus propias tareas recurrentes (como recordatorios); específicamente cómo modelar y almacenar estos en la base de datos (una buena IU porque tampoco es trivial) sería increíble si había un código para eso). El calendario de Google es un gran ejemplo aquí (la UI para agregar un evento, no el calendario completo) ... deberían poder hacer todos los días a la 1pm CST, o mon/wed/fri, o semanalmente, etc. Cualquier solución cron es ser utilizado necesitaría entonces sondear la base de datos para ver qué recordatorios necesitaban ser enviados a esa hora, etc.

¿Alguien ha visto un buen plugin/joya para esto en rieles? Parece que habría algo por ahí, pero aún no lo he encontrado.

Gracias!

+0

¡Estoy buscando exactamente lo mismo! ¿Encontraste una solución a tu problema? – Zabba

+0

ver mi respuesta aceptada a continuación - rodado mi propia solución simple –

Respuesta

5

Terminé rodando mi propia solución ya que no necesitaba nada super elegante.

Básicamente agregué una columna de cadena next_run y interval a la base de datos que era una de (día, semana, etc.). A continuación, configure una tarea cron para ejecutar que busque las fechas next_run que hayan pasado. Los ejecuta y luego establece next_run en algún punto en el futuro según la columna interval.

Simple pero funcionó para mis necesidades.

1

Actualmente pensando en usar un plugin como este para almacenar las recurrencias en una tabla http://github.com/fnando/recurrence/tree/master

cada recordatorio tendría un objeto recurrencia, y el recordatorio también mantendría un campo de fecha y hora cuando se supone que enviar es próxima. Entonces el cron podría ...

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 

Si hay mejores soluciones o voy por el camino equivocado, la entrada siempre se agradece.

1

Siempre he encontrado que las soluciones ical (RFC, no el programa) son el mejor enfoque para trabajar con eventos recurrentes. Hay algunas buenas bibliotecas de Ruby para tratar con ical, y el chico más nuevo en el bloque es ri_cal.

+0

rical se ve muy bien y tiene características completas, estoy algo confundido sobre cómo se puede integrar con los rieles. ¿Almacena eventos u objetos de calendario en la base de datos? ¿Cómo verías los eventos vencidos o harías consultas? ¡Gracias! –

+0

buscando => buscar –

+1

lamentablemente parece que rical no le permite guardar nada en la base de datos ... solo es para leer/generar archivos ical –

0

actualmente estoy teniendo este problema y la solución que estoy considerando es el siguiente:

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

donde período puede ser 1 (todos los días), 7 (cada semana), o 14 (cualquier otra semana).

Si desea admitir otros tipos de programaciones como cada mes, días de la semana, fines de semana, etc., puede agregar una columna llamada "programación" y usar constantes para representar diferentes tipos de programación. También puede usar el enum plugin.

Cuestiones relacionadas