Вы можете получить записи с 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 для группировки строк по месяцам, к которым применяется подсчет. В этом случае вы не получите сами записи из БД, что будет быстрее, если у вас достаточно большая таблица.