pas sûr qu'il ya une façon pure AR pour le faire.
avec Postgre, vous pouvez le faire comme ceci:
Model.select("distinct date_part('month',your_date_field) as my_months").all
ce reviendriez un tableau comme [1,3,10]
.
Vous pouvez ensuite afficher les valeurs de votre tableau en utilisant Date::MONTHNAMES[your month]
pour avoir le nom complet au lieu du numéro.
MISE À JOUR - D'après le commentaire de Caley, et probablement plus DB agnostique
Yourmodel.select('distinct date_field').all.collect{|x| x[:date_field].month}.uniq
donnera
[1, 5, 6, 7, 8, 11, 12, 2, 3, 4, 9, 10]
Si vos données couvre plus de 1 an, cela signifie que vous serez itérer plus de 365 éléments max. (366 dans les mauvaises années). Alors peut-être que le coup de performance est acceptable. J'ai essayé d'exécuter cette
(Date.new(2011,1,1)..Date.new(2011,12,31)).collect{|x| x.month}.uniq
Et le résultat vient instantanément
quelle base de données? sqlite? mysql? poster? – fl00r
le développement est sqlite mais la production sera postgres. J'espérais une solution non spécifique à une base de données. – Brand
Quand vous dites que vous avez des dates comme "2011-06-30", sont-elles stockées comme * strings * dans la base de données ou sont-elles stockées comme une sorte de champ date/heure? – Zabba