241 votes

Quelle est la meilleure façon de modéliser des événements récurrents dans une application de calendrier?

Je suis en train de construire un calendrier de groupe demande que les besoins de soutien des événements récurrents, mais toutes les solutions que j'ai trouvé pour gérer ces événements semblent comme un hack. Je peux limiter à quel point on peut regarder, puis de générer tous les événements à la fois. Ou je peux stocker les événements que de répéter et d'afficher de manière dynamique lorsque l'on regarde en avance sur le calendrier, mais je vais avoir à les convertir à un événement normal, si quelqu'un veut changer les détails sur une instance particulière de l'événement.

Je suis sûr qu'il ya une meilleure façon de le faire, mais je n'ai pas encore trouvé. Quelle est la meilleure façon de modéliser des événements récurrents, où vous pouvez modifier les détails ou supprimer événement particulier les instances?

(Je suis l'aide de Ruby, mais s'il vous plaît ne vous laissez pas limiter votre réponse. Si il y a un Rubis-bibliothèque spécifique, ou quelque chose, si, c'est bon à savoir.)

104voto

user16068 Points 533

Je voudrais utiliser un 'lien' concept pour tous les futurs événements récurrents. Ils sont dynamiquement affichés dans le calendrier et lier de nouveau à un seul objet de référence. Lorsque des événements ont eu lieu, le lien est rompu et que l'événement devient une instance autonome. Si vous tentez de modifier un événement récurrent, puis l'invite à changer tous les futurs articles (c'est à dire changer liée unique de référence) ou de changer juste cette instance (dans ce cas, convertir cette instance autonome et ensuite faire le changement). Le dernier étui est légèrement problématique que vous avez besoin de garder une trace de votre récurrents liste de tous les événements futurs qui ont été convertis en instance unique. Mais, c'est tout à fait faisable.

Donc, en substance, avoir 2 classes d'événements - un seul cas et des événements récurrents.

64voto

Daniel Maurić Points 2170

Martin Fowler - Événements Récurrents pour les Calendriers contient des indications intéressantes et de motifs.

Runt gem met en œuvre ce modèle.

34voto

Lasse V. Karlsen Points 148037

Il peut y avoir beaucoup de problèmes avec les événements récurrents, permettez-moi de souligner quelques-uns que je connais.

Solution 1 - pas de cas

Magasin de rendez-vous d'origine + les données de récurrence, ne pas stocker toutes les instances.

Problèmes:

  • Vous aurez à calculer toutes les instances dans la fenêtre de la date lorsque vous en avez besoin, coûteux
  • Incapable de gérer les exceptions (ie. vous supprimez l'un des cas, ou de le déplacer, ou plutôt, vous ne pouvez pas faire cela avec cette solution)

Solution 2 - stocker les instances

Magasin de 1, mais aussi tous les cas, liée à la nomination initiale.

Problèmes:

  • Prend beaucoup de place (mais l'espace n'est pas cher, donc mineur)
  • Les Exceptions doivent être traitées correctement, surtout si vous revenez en arrière et modifier l'original rendez-vous après de faire une exception. Par exemple, si vous déplacez la troisième instance d'un jour, que si vous revenez en arrière et de modifier le moment de la nomination initiale, ré-insérer une autre sur l'original de la journée et de laisser les déplacés? Dissocier le déplacé? Essayez de changer l'un déplacement d'une façon appropriée?

Bien sûr, si vous n'allez pas faire des exceptions, alors soit la solution doit être fine, et en gros, vous choisissez à partir d'un espace/temps hors commerce scénario.

20voto

Kris Kumler Points 4122

Vous pouvez regarder la iCalendar implémentations de logiciels ou de la norme elle-même (RFC 2445 RFC 5545). À venir à l'esprit rapidement sont les projets Mozilla http://www.mozilla.org/projects/calendar/ Une recherche rapide révèle http://icalendar.rubyforge.org/ .

D'autres options peuvent être envisagées en fonction de la façon dont vous allez stocker les événements. Êtes-vous la construction de votre propre schéma de base de données? À l'aide de quelque chose de iCalendar, etc.?

16voto

Vee Points 441

Je suis en train de travailler avec les éléments suivants:

et un bijou de progrès qui s'étend formtastic avec un input type :périodique (form.schedule :as => :recurring), ce qui rend un iCal-comme l'interface et un before_filter de sérialiser la vue en IceCube objet nouveau, ghetto-ly.

Mon idée est de faire de l'invraisemblance facile d'ajouter récurrents attributs d'un modèle et de le connecter facilement dans la vue. Le tout dans un couple de lignes.


Comment cela peut-il me donner? Indexé, Modifier, Récurrents attributs.

events magasins un jour seul exemple, et est utilisé dans l'affichage du calendrier/helper dire task.schedule magasins le yaml serais IceCube de l'objet, de sorte que vous pouvez faire des appels comme : task.schedule.next_suggestion.

Récapitulons: j'utilise deux modèles, l'un plat, pour l'affichage du calendrier, et un attribut avais pour la fonctionnalité.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X