Dans ce court article, nous expliquons comment faire une recherche sur un intervalle temporel avec le finder ActiveRecord.
Comme vous le savez, il est possible de définir des conditions sur une recherche ActiveRecord en Ruby au lieu d’une chaîne de caractères. Par exemple, on peut remplacer:
1 Article.find :all, :conditions => ["published = 1"]
par
1 Article.find :all, :conditions => {:published => true}
Cela ne marche cependant pour l’instant qu’avec l’égalité (comme l’exemple ci-dessus), les ranges (par exemple {:score => 8..10}, qui génère automatiquement un BETWEEN en SQL) et les tableaux (par exemple {:user_id => [1,4,8]}, qui génère un IN).
Cela marche même avec les ranges d’objets plus compliqués telles que Date ou Time, ce qui simplifie pas mal les recherches sur ce type de champ. Par exemple, pour extraire les articles parus entre il y a un mois et aujourd’hui:
1 @articles_du_dernier_mois = Article.find(:all, 2 :conditions => {:published_at => 1.month.ago..Time.now})
Nous utilisons ce type de recherche sur Frailers pour extraire les articles parus un mois spécifique donné.