Вы можете получить записи с state = 'A'
, которые были созданы в этом месяце так:
MyModel.where(['state = ? AND ? <= created_at AND created_at <= ?',
'A', Date.today.beginning_of_month, Date.today.end_of_month])
count
Применяя к этому запросу вы получите число таких записей.
Если вам нужно количество записей в месяц, и вы можете сделать это так, что (не самый эффективный способ, хотя):
records = MyModel.where("state = 'A'").all
result = records.each_with_object(Hash.new { |h, k| h[k] = 0 }) do |record, hash|
hash[record.created_at.beginning_of_month] += 1
end
Вам может понадобиться, чтобы посмотреть, как Hash#new
работает с блоком и что Enumerable#each_with_object
.
Более эффективный способ подсчета записей в месяц будет состоять в том, чтобы использовать простой SQL для группировки строк по месяцам и применять к нему значение count. В этом случае вы не будете извлекать сами записи из БД, которые будут быстрее, если у вас достаточно большая таблица.
Вы получаете все записи, которые имеют 'state = 'A'', а затем группируют их. Он генерирует хэш, где ключи начинаются с месяцев и значений - массивы записей, которые создаются в соответствующие месяцы. Применение 'count' к этому дает вам всего несколько месяцев, когда записи с' state = 'A'' создаются. Можете ли вы лучше описать результат, который хотите получить? –
А не упоминается, что счет мой плохой. я просто хочу получить счет записи, созданный в текущем месяце, который указывается в 'A'. –
Если вы хотите только подсчитать записи с 'state = 'A'', созданными в текущем месяце, почему вам нужна группировка? Вы хотите, чтобы количество записей было создано за каждый месяц? –