2012-04-16 4 views
4

나는 Rails 시드까지의 기간 범위를 가져오고 싶습니다.루비/레일의 날짜 범위

날짜 범위 ((Date.today - 10) .. Date.today) 예외를 생성하려고하면 예외가 발생했습니다.

예외 메시지 :

하지만 모든 권리 레일 콘솔 모두에서 범위에 대한 나쁜 값.

저는 ActiveSupport가 이에 적합하다고 생각합니다 (제 디버거가 말했습니다).

경기장 3.1.3

무슨 일 이니?

+0

이렇게 할 수 있습니다! 날짜 범위를 단계별로 진행하는 주변 사례가 많이 있지만, Rails의 ActiveSupport를 사용하는 경우 우아하게 처리 할 수 ​​있습니다. 자세한 내용은 http://stackoverflow.com/questions/19093487/ruby-create-range-of-dates/19094504#answer-19094504에서 내 대답을 확인하십시오. D – captainpete

답변

6

당신은 두 개의 모서리를 분할하여 무슨 일이 일어나고 있는지 이해하고 그래서 같이 자신의 클래스를 확인할 수 있습니다

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

을 겪고있는 오류는이 같은 것입니다 :

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

범위의 2 가장자리 클래스를 게시 할 수 있습니까?

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

레일 환경에서 어떤 클래스를 덮어 썼습니까? irb에서 작동합니까?

PS : 당신이 레일에있어로서 당신은 10.days.ago 사용할 수 있지만 그것이 ActiveSupport::TimeWithZone

+0

가장자리 클래스는 날짜입니다. –

+0

나는 당신을 믿는다. 그러나 어쨌든 시도해 보라.'((Date.today - 10) .to_date..Date.today.to_date)' – ecoologic

+0

Ecologic, 고마워요! 변수 이름에서의 실수. –

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

모든 것이 나를 위해 잘 작동의 나는 또한 레일 3.1.3, 루비의 내 버전을 사용하고 to_date를 사용해야합니다 1.9.2p290입니다. 아마도 루비 버전을 업데이트해야합니까?

+0

이 나를 위해 1.8.7에서 작동합니다. – ecoologic