Простой пользовательский диапазон в Ruby - PullRequest
3 голосов
/ 07 февраля 2010

У меня есть Rails named_scope, который использует условие для извлечения определенных дней недели из таблицы следующим образом:

:conditions => [ 'EXTRACT(DOW FROM bookdate) IN (?)', (1..6).to_a ]

Диапазон дат 1..6 будет переменной в зависимости от желаемых дат,

Который производит этот SQL

(EXTRACT(DOW FROM bookdate) IN (1,2,3,4,5,6)

Моя проблема в том, что дни недели не являются простым диапазоном ... т.е. 1..6 работает нормально (пн ... сб), но, скажем, 6..2 не будет работать правильно (сб-вт) ... либо в качестве рубинового диапазона, либо в виде 6,7,1,2, а не 6,5,4,3,2 (при условии, что 6..2 работает в рубине, чего не происходит).

Как я могу создать пользовательский диапазон для дней недели, который бы соответствовал диапазону дат, подобному этому?

Есть идеи?

Спасибо

1 Ответ

7 голосов
/ 07 февраля 2010

Если вы хотите, чтобы функция генерировала диапазон значений для включения в :conditions, которая будет работать для таких диапазонов, как суббота-вторник, а также понедельник-суббота, как насчет:

def day_range(from, to)
  if from <= to
    (from..to).to_a
  else
    (from..7).to_a + (1..to).to_a
  end
end

, например

irb(main):032:0> day_range(1, 6)
=> [1, 2, 3, 4, 5, 6]
irb(main):033:0> day_range(6, 2)
=> [6, 7, 1, 2]

Тогда это всего лишь случай отображения названий дней в номера дней, если это необходимо.

...