2012-04-16 3 views
4

Я хочу получить диапазон дат между и до в Rails семена.Диапазон дат в рубинах/рельсах

Когда я пытаюсь создать диапазон дат ((Date.today - 10) .. Date.today), возникло исключение.

Сообщение об исключении: плохое значение для диапазона

Но в Rails консоли все в порядке.

Я думаю, что ActiveSupport разумно для этого (мой отладчик сказал мне это).

Ralls 3.1.3

Что происходит?

+0

Это можно сделать! Есть множество краевых дел вокруг перехода по диапазонам дат, но если вы используете ActiveSupport из Rails, их можно обрабатывать элегантно. Посмотрите мой ответ на 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 

Можете ли вы опубликовать классы ваших двух краев диапазона?

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

Вы перезаписали какой-либо класс в своей среде рельсов? Работает ли он в irb?

PS: Как вы в рельсах вы можете использовать 10.days.ago, но вы должны будете использовать to_date, как это ActiveSupport::TimeWithZone

+0

Класс ребер - дата, действительно. –

+0

Я верю, но попробуйте в любом случае '((Date.today - 10) .to_date..Date.today.to_date)' – ecoologic

+0

Экология, спасибо! Только моя ошибка в имени переменной. –

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, моя версия рубина 1.9.2p290, возможно, вам нужно обновить рубиновую версию?

+0

работает для меня в 1.8.7 – ecoologic

Смежные вопросы