#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-это количество товарищей или заданий?