Cli*_*ach 213 ruby algorithm recurrence calendar data-modeling
我正在构建一个需要支持重复事件的组日历应用程序,但是我提出来处理这些事件的所有解决方案看起来都像是一个黑客.我可以限制前方可以看到的距离,然后立即生成所有事件.或者我可以将事件存储为重复,并在日历上向前看时动态显示它们,但如果有人想要更改特定事件实例的详细信息,我将不得不将它们转换为正常事件.
我确信有更好的方法可以做到这一点,但我还没有找到它.对重复事件建模的最佳方法是什么,您可以在其中更改特定事件实例的详细信息或删除特定事件实例?
(我正在使用Ruby,但请不要让这限制你的答案.如果有一个特定于Ruby的库或其他东西,那么,这很有用.)
小智 84
我将对所有未来的重复事件使用"链接"概念.它们动态显示在日历中并链接回单个参考对象.当事件发生时,链接被破坏,事件变为独立实例.如果您尝试编辑定期事件,则提示更改所有将来的项目(即更改单个链接引用)或仅更改该实例(在这种情况下将其转换为独立实例,然后进行更改).由于您需要跟踪转换为单个实例的所有未来事件的重复列表,因此后者的问题稍有问题.但是,这完全是可行的.
因此,实质上,有两类事件 - 单个实例和重复事件.
ang*_*son 32
重复发生的事件可能会有很多问题,让我重点介绍一下我所知道的事件.
存储原始约会+重复数据,不存储所有实例.
问题:
存储1中的所有内容,但也存储所有实例,链接回原始约会.
问题:
当然,如果你不打算做例外,那么任何一个解决方案都应该没问题,你基本上可以选择时间/空间权衡方案.
Kri*_*ler 17
您可能希望查看iCalendar软件实现或标准本身(RFC 2445 RFC 5545).Mozilla项目很快就会浮现在脑海中http://www.mozilla.org/projects/calendar/ 快速搜索显示http://icalendar.rubyforge.org/.
可以考虑其他选项,具体取决于您将如何存储事件.您是否正在构建自己的数据库架构?使用基于iCalendar的东西等?
Vee*_*Vee 16
我正在使用以下内容:
还有一个正在进行的宝石,它使用输入类型扩展了formtastic:recurring(form.schedule :as => :recurring
),它呈现类似iCal的界面,before_filter
并将视图IceCube
再次序列化为一个对象,ghetto-ly.
我的想法是让向模型添加重复属性并在视图中轻松连接它变得难以置信.一切都在几行.
那给了我什么呢?索引,可编辑,重复属性.
events
存储单日实例,并在日历视图/帮助器中使用,例如task.schedule
存储yaml'd IceCube
对象,因此您可以执行以下调用:task.schedule.next_suggestion
.
回顾:我使用两个模型,一个平面,用于日历显示,一个属性用于功能.
Bri*_*kau 15
我开发了多个基于日历的应用程序,还编写了一组支持重复发生的可重用JavaScript日历组件.我写了一篇关于如何设计可能对某人有帮助的重现的概述.虽然有一些特定于我编写的库的位,但提供的绝大多数建议对于任何日历实现都是通用的.
一些关键点:
这是一个非常复杂的主题,有很多很多有效的方法来实现它.我会说我实际上已经多次成功实施了复发,而且我会警惕从没有实际做过这个问题的人那里接受这个问题的建议.
我正在使用如下所述的数据库模式来存储重复参数
http://github.com/bakineggs/recurring_events_for
然后我用runt动态计算日期.
https://github.com/mlipper/runt