6

我正在研究使用 Ice Cube https://github.com/seejohnrun/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

这似乎非常低效,但我不知道该怎么做。

4

2 回答 2

4

这是一种方法——但人们更常做的是最终将他们的日程表非规范化为一种便于查询的格式。

您可能有一个名为 ScheduleOccurrences 的集合 - 您每周构建/然后查询它。

不幸的是,它必须以这种方式工作,但坚持 iCal 管理时间表的方式导致 IceCube 需要以某些方式格式化其数据(特别是可以符合 iCal RFC 要求的方式)。

我最近一直在思考一个图书馆会是什么样子,它会摆脱一些限制,以获得更大的灵活性——但它肯定还是有点偏离。

希望这可以帮助

于 2012-06-04T16:05:09.097 回答
0

我遇到了类似的问题,这是我的方法:

在 Event 表上创建一个列来存储下一次发生日期,并编写一个方法来存储该值 after_save。(通过 ice_cube 可用的方法。也许索引列也可以更快地查询。)

然后,您可以在数据库中查询您需要的时间范围内发生的事件。见下文:

Event.where(next_occurrence: Date.today.all_day)

将 EventOccurrences 存储在单独的表中。

更新查询返回给您的行的 next_occurrence 列。或类似的东西。这对我有用,因为我正在运行一项日常工作,因此更新 next_occurrence 将定期运行。但是你可能需要稍微调整一下。

于 2018-06-01T16:21:46.920 回答