Я создаю приложение Rails, чтобы извлекать данные из проекта Джона Хопкинса Covid-19 Github и рассчитывать ежедневные темпы роста для случаев и смертей. Я начал это, потому что я хотел видеть изменение данных каждый день для моего города Нэшвилл. В настоящее время у меня есть жестко закодированная таблица html, которую вы можете увидеть здесь , но я пытаюсь сделать ее динамической c, чтобы она работала для каждого округа в США.
На данный момент я заблокирован, пытаясь смоделировать базу данных и рассчитать ежедневные темпы роста при обратном вызове before_save
, потому что я не уверен, как искать нужные мне записи.
Как найти достойный способ найти запись в рельсах, которая находится рядом с предыдущей записью, которую вы ищете? Я даже не уверен, как четко сказать это в Engli sh, что, вероятно, является root моей проблемы с невозможностью вставить это в код. Например, сегодня против вчерашнего дня или 28 марта против 27 марта или 31 марта против 30 марта и т. Д. c. Мне нужно найти первую запись на основе даты, а затем найти последнюю запись за предыдущий день.
Это должно быть что-то похожее на этот 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
Вот модель , где происходит этот обратный вызов.
Но этот подход не будет работать , потому что бывают случаи, когда данные могут быть неверными за предыдущую дату и это должно будет быть обновлено. Например, департамент здравоохранения штата Теннесси может обнаружить, что у них были ошибочные данные за 31 марта, поэтому данные Джона Хопкинса обновляются, и, следовательно, необходимо обновить запись в моей базе данных. Итак, с моим кодом выше, в первый раз это вызовет Update.last
и сохранит неправильный темп роста на 31 марта. Таким образом, мне нужен обратный вызов для работы, независимо от того, рассчитывает ли он темп роста на сегодня по сравнению со вчерашним днем или 28 марта по сравнению с 27 марта и т. Д. c.
Это открытый проект, поэтому все приложение здесь . (Пожалуйста, отправьте запрос на включение, если вы хотите помочь напрямую!)