2012-04-16 4 views
4

Je souhaite connaître la période entre le début et la fin de la graine Rails.Plage de dates en rubis/rails

Lorsque j'essaie de générer une plage de dates ((Date.today - 10) .. Date.today), une exception s'est produite.

Message d'exception: mauvaise valeur pour la plage

Mais dans la console Rails tout bien.

Je pense qu'ActiveSupport est raisonnable pour cela (mon débogueur me l'a dit).

Ralls 3.1.3

Que se passe-t-il?

+0

Cela peut être fait! Il y a beaucoup de casse-bords autour des plages de dates, mais si vous utilisez ActiveSupport de Rails, vous pouvez les manipuler avec élégance. Consultez ma réponse à http://stackoverflow.com/questions/19093487/ruby-create-range-of-dates/19094504#answer-19094504 pour plus de détails: D – captainpete

Répondre

6

Vous pouvez comprendre ce qui se passe en divisant les deux bords et vérifier leur classe comme ceci:

Date.today.class # => Date 
(Date.today - 10).class # => Date 
((Date.today - 10)..Date.today).each {|d| puts d.class} # => 10 Date works for me 

L'erreur que vous rencontrez est quelque chose comme ceci:

('a'..10) # => ArgumentError: bad value for range 

Pouvez-vous poster les classes de vos 2 bords de la gamme?

(Date.today - 10).class => ? 
Date.today.class  => ? 

Avez-vous remplacé une classe dans votre environnement rails? Est-ce que cela fonctionne dans irb?

PS: Comme vous êtes dans des rails, vous pouvez utiliser 10.days.ago mais vous aurez besoin d'utiliser to_date comme il est un ActiveSupport::TimeWithZone

+0

La classe des bords est Date, vraiment. –

+0

Je vous crois, mais essayez de toute façon '((Date.today - 10) .to_date..Date.today.to_date)' – ecoologic

+0

Ecologic, merci! Juste mon erreur au nom de la variable. –

3
begin 
    ((Date.today - 10)..Date.today).each { |date| puts date } 
rescue 
    $! # => #<NameError: uninitialized constant Date> 
end 

require 'date' 
((Date.today - 10)..Date.today).each { |date| puts date } 
# >> 2012-04-06 
# >> 2012-04-07 
# >> 2012-04-08 
# >> 2012-04-09 
# >> 2012-04-10 
# >> 2012-04-11 
# >> 2012-04-12 
# >> 2012-04-13 
# >> 2012-04-14 
# >> 2012-04-15 
# >> 2012-04-16 
0

Tout fonctionne bien pour moi je l'utilise également des rails 3.1.3, ma version de rubis est 1.9.2p290, peut-être vous avez besoin de mettre à jour votre version de rubis?

+0

travaille pour moi en 1.8.7 – ecoologic