Date
объекты также Comparable
, так что вы можете создать Range
:
@range = @date..(@date + 10)
Вы можете легко выполнить итерацию и вывести результаты. Если вы хотите получить доступ к определенной дате численно, вы можете сделать:
@date_range = (@date..(@date + 10)).to_a
@date_range[1]
Или, если вам действительно нужно предварительно отформатировать даты, как в вашем примере:
@date_range = (@date..(@date + 10)).map { |date| date.strftime("%Y-%m-%d") }
@date_range[1]
Последняя строка будет эквивалентна вашему @date_range[1]
(равно завтра / @date + 1
), хотя на самом деле это Array
, а не Hash
. Hash
с последовательными цифровыми клавишами не имеет большого смысла: вы получаете их бесплатно с Array
и , в качестве бонуса порядок значений сохраняется. По моему мнению, использование Range
s для начала немного проясняет намерение, но это не впечатляющая разница.