2010-10-15 9 views
0

je fais:Rails et created_at

Order.find(:all, :conditions => "created_at>='#{DateTime.now.year}-#{month}-1' and created_at<='#{Date.new(DateTime.now.year, month.to_i, -1)}'") 

qui fonctionne bien, sauf que tout créé le dernier jour du mois ne sont pas inclus. Created_at pourrait contenir: "2010-09-30 18:34:09". Ce n'est PAS inférieur ou égal à "2010-09-30". Je sais que je pourrais juste changer la méthode à ceci:

Order.find(:all, :conditions => "created_at>='#{DateTime.now.year}-#{month}-1' and created_at<='#{Date.new(DateTime.now.year, month.to_i, -1)} 23:59:59'") 

... mais cela semble plutôt faux. Y a-t-il une façon plus intelligente de le faire?

Répondre

0

Ce serait la bonne façon de le faire, à mon humble avis. La représentation d'un temps comme 2010-09-30 18:34:09 est conceptuellement juste un affichage convivial d'un seul nombre. Donc, pensez-y comme faisant des comparaisons avec un nombre. Il est donc logique d'être explicite sur les valeurs minimales et maximales du nombre en question.

0

Cela ne résoudra peut-être pas le problème, mais vous devriez utiliser les extensions Ruby de Rails ici. Vous pouvez faire des choses comme 1.month.ago qui retournera un objet DateTime représentant la date actuelle moins 1 mois.

D'autres méthodes auxquelles vous pouvez vous attendre sont également définies. 4.days.from_now, 3.days.since(Date.yesterday), etc.

+1

Je les connais mais comment les utiliseriez-vous dans l'exemple ci-dessus? – jriff

2

Ou vous pouvez utiliser

< Date.today.next_month.beginning_of_month 

pour obtenir tout inférieur au mois suivant.

Questions connexes