如何存储频率日期

时间:2015-01-20 10:50:49

标签: ruby-on-rails postgresql ruby-on-rails-4 postgresql-9.3

我的用户有以下频率选项:每日,每周,每两周,每月。 同样对于最后一棵树,他们可以选择选择哪些日期,例如每周/每两周他们可以选择每一天(周一,周二,周五)和每月(10,15,25,30)。

对于每周频率,我可以获得他们选择的一周中的日期,在轨道中它们是0-6(周日至周六)。

所以我带来了桌子: 设置:setting_id,resource_id,频率(每日,每周,每两周,每月),天[]:[0,1,2]

现在我需要每天构建一个postgresql数据库视图,它需要resource_id表中的Settings,并且只能获得当天安排频率和天数的资源(now())

我能想到的一个解决方案是使用postgresql CASE函数并检查为resource设置的频率类型,在案例块中我可以解析当前日期获取包含星期数的日期编号或周数,并将其与表中存储的数字进行比较。

有没有更好的方法,因为我可以看到DB视图的一些性能问题。

另一种选择是我猜每个报告都有不同的观点。

1 个答案:

答案 0 :(得分:1)

您有几种选择。一种可能性是使用字符串,并将频率编码为cron-like syntax

这是一个众所周知的格式。它不是立竿见影的,但它存储在某个地方非常好,例如存储在文件中(如cron)或数据库字段。

有一些Ruby库,例如wheneverrufus-scheduler已经处理了将cron语法转换为Ruby表示的麻烦,反之亦然。

因此你可以写

every :day, :at => '12:20am'

every '3h'
at '2030/12/12 23:30:00'

并获得格式良好的cron计划定义。您可以将其中一个库的解析器拉入项目中,并使用它将数据库序列化字符串转换为Ruby表示形式,反之亦然。