не уверен, что есть чистый AR способ сделать это.
с Postgre, вы можете сделать это так:
Model.select("distinct date_part('month',your_date_field) as my_months").all
это вернет массив, подобный [1,3,10]
.
Затем вы можете отобразить значения вашего массива, используя Date::MONTHNAMES[your month]
, чтобы иметь полное имя вместо числа.
ОБНОВЛЕНИЕ - Основано на комментарии Кейли и, возможно, более независимом от БД
Yourmodel.select('distinct date_field').all.collect{|x| x[:date_field].month}.uniq
даст
[1, 5, 6, 7, 8, 11, 12, 2, 3, 4, 9, 10]
Если ваши данные охватывают более 1 года, это означает, что вы будете перебирать максимум 365 элементов. (366 в плохие годы). Так что, возможно, результативность работы приемлема.
Я пытался запустить это
(Date.new(2011,1,1)..Date.new(2011,12,31)).collect{|x| x.month}.uniq
И результат приходит мгновенно