Ruby on rails 高效检索给定时间段内的冰块时间表
我正在考虑使用冰块来进行重复性活动。 我的问题是,如果我需要在给定的时间段内(比如,在一天或一周内)获取任何事件,有没有更好的方法比像这样循环它们更好:Ruby on rails 高效检索给定时间段内的冰块时间表,ruby-on-rails,ruby-on-rails-3,ice-cube,Ruby On Rails,Ruby On Rails 3,Ice Cube,我正在考虑使用冰块来进行重复性活动。 我的问题是,如果我需要在给定的时间段内(比如,在一天或一周内)获取任何事件,有没有更好的方法比像这样循环它们更好: items = Records.find(:all) items.each do |item| schedule = item.schedule if schedule.occurs_on?(Date.new) #if today is a recurrence, add to array end end 这似乎效率极
items = Records.find(:all)
items.each do |item|
schedule = item.schedule
if schedule.occurs_on?(Date.new)
#if today is a recurrence, add to array
end
end
这似乎效率极低,但我不知道还有什么其他方法可以做到。这是一种方法,但人们更经常做的是将他们的时间表反规范化为一种便于查询的格式 您可能有一个名为ScheduleAccurrencess的集合,它是您每周/然后查询的 不幸的是,它必须以这种方式工作,但坚持采用iCal的日程管理方式导致IceCube需要以某种方式格式化其数据(特别是可以符合iCal RFC要求的方式) 我最近一直在思考一个图书馆应该是什么样子,它摆脱了一些限制,实现了这样更大的灵活性——但它肯定还是有点偏离
希望这有帮助我遇到了类似的问题,我的方法如下: 在事件表上创建一列以存储下一个发生日期,并编写一个方法,在保存后存储该值。(方法可通过ice_cube获得。为了更快地查询,可能还需要索引列。) 然后,您可以查询数据库中在您需要的时间范围内发生的事件。见下文:
Event.where(下一个事件:日期、今天、全天)
将事件事件存储在单独的表中
为查询返回的行更新下一个_出现列。或者类似的东西。这对我很有用,因为我每天都在运行一个作业,所以下次更新将定期运行。但是你可能需要调整一下 谢谢你,约翰。但是,当用户浏览过去一周的日历时会发生什么呢?也许您可以根据需要生成日程安排事件?因此,如果有人请求下周的日程安排,服务器可以保存这些行。我目前正试图弄清楚如何在rails ap中重复事件…你最终做了什么?我被困在同一个地方?感谢这是一个我还没有完全测试过的答案。我修改了它以使它更清晰。