Как запросить соседнюю предыдущую запись к другой записи, которую вы ищете в Rails с Active Record? - PullRequest
0 голосов
/ 02 апреля 2020

Я создаю приложение 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.

Это открытый проект, поэтому все приложение здесь . (Пожалуйста, отправьте запрос на включение, если вы хотите помочь напрямую!)

1 Ответ

2 голосов
/ 02 апреля 2020

Из того, что я понял, вам нужны дела предыдущего дня. Скажем, если сегодня 2 апреля, то вам нужен случай 1 апреля, а затем рассчитайте темп роста. Чтобы получить дела из предыдущего дня, вы можете сделать что-то вроде этого. Update.where(date: 1.day.ago) это вернет дела предыдущего дня. Я посмотрел атрибут date из вашей схемы. Надеюсь, что это поможет

ОБНОВЛЕНИЕ : Таким образом, требовалось выбрать случаи из предыдущей даты относительно любой текущей даты, а затем рассчитать темп роста случаев, который рассчитывается по

    before_save :calculate_case_growth_rate

    def calculate_case_growth_rate
      current_cases  = self.cases
      previous_cases = Update.where(date: (self.date - 1.day)).sum(:cases)
      self.case_growth_rate = ((current_cases - previous_cases) / current_cases)
    end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...