【发布时间】:2020-07-14 14:11:49
【问题描述】:
我正在构建一个 Rails 应用程序以从 Johns Hopkins Covid-19 Github project 中提取数据并计算病例和死亡人数的每日增长率。我开始这样做是因为我想查看我所在城市纳什维尔每天的数据变化。目前,我有一个硬编码的 html 表,you can see here,但我正在尝试使其动态化,以便它适用于美国的每个县。
此时,我无法尝试对数据库进行建模并在 before_save 回调中计算每日增长率,因为我不确定如何查找所需的记录。
什么是在 Rails 中找到与您正在查找的记录相邻的记录的一种不错的方法?我什至不确定如何用英语说清楚,这可能是我无法将其写入代码的问题的根源。比如今天vs昨天OR 3月28th vs. 3月27th OR 3月31th vs 3月30th等等。我需要根据日期找到第一条记录,然后找到前一天的最后一条记录。
应该类似于这个before_save回调:
def calculate_case_growth_rate
current_cases = self.cases
previous_cases = Update.where(date: 1.day.ago).sum(:cases)
self.case_growth_rate = (current_cases - previous_cases) / current_cases
end
这是发生回调的the model。
但是,这种方法行不通,因为有时数据可能不正确,需要更新。例如,田纳西州卫生部门可能会发现他们 3 月 31 日的数据有误,因此约翰霍普金斯大学的数据得到更新,因此我的数据库中的记录也需要更新。因此,对于我上面的代码,第一次发生这种情况时,它会调用 Update.last 并为 3 月 31 日保存不正确的增长率。因此,无论是计算今天与昨天的增长率还是 3 月 28 日与 3 月 27 日的增长率等,我都需要回调来工作。
这是一个开放项目,所以整个应用程序是here。 (如果您想直接提供帮助,请发送拉取请求!)
【问题讨论】:
标签: ruby-on-rails ruby postgresql activerecord