209 votes

Rails ActiveRecord date entre

J'ai besoin d'interroger les observations faites en un jour. Le domaine est la partie de la norme d'horodateurs, est created_at. Le choix de la date est à venir à partir d'un date_select. Comment puis-je utiliser ActiveRecord pour le faire?

J'ai besoin de quelque chose comme:

"SELECT * FROM comments WHERE created_at BETWEEN '2010-02-03 00:00:00' AND '2010-02-03 23:59:59'"

477voto

nathan.f77 Points 4941

Juste une remarque qui actuellement accepté réponse est obsolète dans Rails 3. Vous devriez faire ceci à la place:

Comment.where(:created_at => @selected_date.beginning_of_day..@selected_date.end_of_day)

59voto

Marshall Shen Points 386

J'ai personnellement créé un champ d'application pour le rendre plus lisible et réutilisable:

En vous Commentaire.rb, vous pouvez définir un champ:

scope :created_between, lambda {|start_date, end_date| where("created_at >= ? AND created_at <= ?", start_date, end_date )}

Puis, à la requête créée entre:

@comment.created_between(1.year.ago, Time.now)

Espérons que cela aide.

26voto

baijiu Points 856

Ce code devrait fonctionner pour vous:

Comment.find(:all, :conditions => {:created_at => @selected_date.beginning_of_day..@selected_date.end_of_day})

Pour plus d'infos, jetez un oeil à des calculs de Temps

Remarque: Ce code est obsolète. Utiliser le code de la réponse si vous êtes à l'aide de Rails 3.1/3.2

7voto

kaushal sharma Points 21
Comment.find(:all, :conditions =>["date(created_at) BETWEEN ? AND ? ", '2011-11-01','2011-11-15'])

4voto

klew Points 9437

Si vous souhaitez obtenir un jour il serait plus facile de cette façon:

Comment.all(:conditions => ["date(created_at) = ?", some_date])

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X