我的用户有以下频率选项:每日,每周,每两周,每月。 同样对于最后一棵树,他们可以选择选择哪些日期,例如每周/每两周他们可以选择每一天(周一,周二,周五)和每月(10,15,25,30)。
对于每周频率,我可以获得他们选择的一周中的日期,在轨道中它们是0-6(周日至周六)。
所以我带来了桌子: 设置:setting_id,resource_id,频率(每日,每周,每两周,每月),天[]:[0,1,2]
现在我需要每天构建一个postgresql数据库视图,它需要resource_id
表中的Settings
,并且只能获得当天安排频率和天数的资源(now())
我能想到的一个解决方案是使用postgresql CASE
函数并检查为resource
设置的频率类型,在案例块中我可以解析当前日期获取包含星期数的日期编号或周数,并将其与表中存储的数字进行比较。
有没有更好的方法,因为我可以看到DB视图的一些性能问题。
另一种选择是我猜每个报告都有不同的观点。
答案 0 :(得分:1)
您有几种选择。一种可能性是使用字符串,并将频率编码为cron-like syntax。
这是一个众所周知的格式。它不是立竿见影的,但它存储在某个地方非常好,例如存储在文件中(如cron
)或数据库字段。
有一些Ruby库,例如whenever
和rufus-scheduler
已经处理了将cron语法转换为Ruby表示的麻烦,反之亦然。
因此你可以写
every :day, :at => '12:20am'
或
every '3h'
at '2030/12/12 23:30:00'
并获得格式良好的cron计划定义。您可以将其中一个库的解析器拉入项目中,并使用它将数据库序列化字符串转换为Ruby表示形式,反之亦然。