【问题标题】:Efficiently retrieving ice_cube schedules for a given time period有效地检索给定时间段的 ice_cube 时间表
【发布时间】:2018-06-02 07:39:49
【问题描述】:

我正在考虑使用 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

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

【问题讨论】:

  • 你最终做了什么?我被困在同一个地方?谢谢

标签: ruby-on-rails ruby-on-rails-3 ice-cube


【解决方案1】:

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

您可能有一个名为 ScheduleOccurrences 之类的集合 - 您每周构建 / 然后对其进行查询。

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

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

希望对你有帮助

【讨论】:

  • 谢谢,约翰。但是当用户浏览下周过去的日历时会发生什么?
  • 也许您可以根据需要生成 ScheduleOccurrences?因此,如果有人请求下周的时间表,服务器可以保存这些行。我目前正在尝试弄清楚如何在我的 Rails 应用程序中重复事件...
【解决方案2】:

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

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

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

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

将 EventOccurrences 存储在单独的表中。

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

【讨论】:

  • 这是一个我还没有完全测试过的答案。我对其进行了修改以使其更加清晰。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-25
  • 2018-07-27
  • 1970-01-01
  • 2016-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多