Цикл по неделям года в Руби (Синатре) - PullRequest
1 голос
/ 26 октября 2010

Я создаю очень простое приложение для таймшеров, используя Sinatra и Datamapper. Каждый пользователь в приложении будет иметь n резервирований, и в настоящее время каждое резервирование выполняется с понедельника по воскресенье, и в неделю может быть только одно резервирование.

Теперь мне понадобится представление с текстовым полем (и надписью) для каждой недели года, где пользователи будут указывать свое имя (через автозаполнение или что-то в этом роде) и, таким образом, создавать резервирование на эту неделю. И если неделя зарезервирована, имя, конечно, будет заполнено в текстовом поле (и отключено)

Это было бы что-то вроде

weeks.each do
  find user that has reserved this week - and create a textbox
end

Итак, мой вопрос, как мне кажется, прост: как мне пройтись по всем неделям в Ruby?

Или лучше было бы просто зациклить 52 раза и создать массив для каждого пользователя с количеством зарезервированных недель в нем?

Ответы [ 3 ]

2 голосов
/ 07 мая 2011

Вы должны пройти через это:

(Date.beginning_of_year.cweek...Date.today.end_of_year.cweek).each do |week|
  find user that has reserved this week - and create a textbox
end
1 голос
/ 26 октября 2010
(1..52).each do |week|
   # find user that has reserved this week - and create a textbox
end
0 голосов
/ 10 мая 2014

Для других, которые могут найти этот старый вопрос, как я ...

1 января иногда является неделей 53. 31 декабря иногда является неделей 1. Если вы хотите просмотреть все недели года, вы должны сначала решить, хотите ли вы первые дни января, даже если это могут быть предыдущие неделя 53.

Чтобы получить наибольший номер недели в году, вы всегда можете проверить 28 декабря (поскольку в неделях ISO указано, что неделя 1 - это неделя с первым четвергом).

Если вас не волнуют первые дни января (может быть, пятница), вы можете сделать что-то вроде:

require 'date' # Already included in sinatra though

(1..Date.parse("#{year}-12-28").cweek).each do |week|
  puts week
end
...