2012-08-08 4 views
0

Je crée une application de blog simple et je veux ajouter une archive où les gens peuvent cliquer sur un mois et tous les articles de ce mois sont affichés. C'est comme un regroupement basé sur le mois et l'année. Par exemple,regrouper des enregistrements dans les rails

Articles:

  • juin 2012
  • mai 2011

donc en cliquant sur une date, il vous amène à une page et répertorie tous les articles de ce mois . Comment puis-je le faire?

+0

Quel est le problème, alors? – madth3

+0

Comment y arriver – Uchenna

Répondre

1

Pour Juillet 2012:

require 'date' 

month = 7 
year = 2012 

start_date = Date.new(year,month,1) 
end_date = Date.new(year,month+1,1) - 1.day 

articles_in_july = Article.where(:created_at => start_date..end_date) 

Vous pouvez tester dans une console avec ce qui précède. Cependant, dans votre modèle que vous voulez probablement:

def self.in_month(month,year) 
    start_date = Date.new(year,month,1) 
    end_date = Date.new(year,month+1,1) - 1.day 
    where(:created_at => start_date..end_date) 
end 

Ensuite, vous pouvez appeler:

Article.in_month(7,2012) 

ou, en supposant un des articles has_many utilisateur:

current_user.articles.in_month(7,2012) 
+1

Vous pouvez également faire ceci: 'date = date.nouvelle (année, mois, 1)' et ensuite 'où (: created_at => date..date.end_of_month)'. Fait un peu plus court. – Mischa

+0

C'est gentil. Merci! –

+0

La réponse est bonne, mais comment puis-je passer le mois et l'année dans le lien en supposant que les éléments de la liste sont dans une balise de lien. Et comment sera l'itinéraire. J'essaie de le faire depuis presque une journée maintenant et je ne peux toujours pas passer le mois et l'année dans un paramètre. – Uchenna

Questions connexes