Простой пользовательский диапазон в Ruby

У меня есть 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 работает в рубине, а это не так).

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

Любые идеи?

Спасибо,


person holden    schedule 07.02.2010    source источник


Ответы (1)


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

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

e.g.

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]

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

person mikej    schedule 07.02.2010