Подсчет хэша Rails по определенным ключам в хэше

#ruby-on-rails #hash #key

Вопрос:

Привет, я использую этот код ниже

 Companion.where(companion_type: 1).joins(:tasks).where(tasks: {status: 3}).group_by_month(:created_at).size
 

и у меня есть данные, которые выглядят так

 Jan, 2017 => 89
     .
     .
     .

Aug, 2021 => 300
 

Но мне нужны данные выше от января 2019 года
Есть ли какие-нибудь хорошие способы решить эту проблему?

Ответ №1:

Если вас интересует только январь 2019 года, то вам не нужно вытаскивать всю сопутствующую таблицу, а затем группировать их по месяцам. Вместо этого выберите только те, которые относятся к интересующему месяцу…

 Companion.
  where(companion_type: 1).
  joins(:tasks).
  where(tasks: {status: 3}).
  where("MONTH(tasks.created_at) = 1 AND DAY(tasks.created_at) = 19").
  count
 

Я предполагаю, что вы хотите отфильтровать задачи, а не компаньонов, верно? created_at created_at

Кроме того, его лучше использовать count , чем size потому, что он непосредственно вставляется в sql, в отличие от создания экземпляров всех объектов с января 2019 года, а затем применения .size к результату.

Комментарии:

1. о, я написал абсолютно неправильный вопрос… мне нужны данные, начиная с января 2019 года!

2. данные, которые я хотел бы знать, — это сколько у компаньона(companion_type: 1) есть задача, начиная с 2019 года

3. Я не совсем понимаю, чего ты хочешь. В вашем примере результат означает ли это, что у 300 компаньонов была какая-то задача в августе 2021 года, или это означает, что в августе 2021 года было 300 задач, принадлежащих любому компаньону(тип: 1)? Или спросили по-другому, 300-это количество товарищей или заданий?