2015-10-27 3 views
1

У меня возникли проблемы с выяснением того, как создать область для определенного типа запросов, которые я пытаюсь сделать.Попытка фильтровать поля datetime только по времени

В принципе у меня есть модель доступности, которая содержит столбцы datetime start_time и end_time.

У меня есть начало и конец времени выпадающее меню, на мой взгляд, который возвращает этот запрос на поиск:

"availabilities"."start_time" >= '2015-10-27 00:00:00.000000' AND "availabilities"."end_time" <= '2015-10-31 00:00:00.000000' 

Я попросил, чтобы добавить новый диапазон времени фильтра:

Morning (6am - 12pm) 
Afternoon (12-6pm) 
Night (6pm - 12am) 

I Я не знаю, как я к этому подхожу. Это какая запись доступность выглядит следующим образом:

<Availability:0x000000065b2bf0> { 
       :id => 1, 
     :start_time => Sat, 21 Nov 2015 11:00:00 UTC +00:00, 
      :end_time => Sat, 21 Nov 2015 12:00:00 UTC +00:00, 
       :price => 24.1, 
      :discount => 20.0, 
     :created_at => Fri, 23 Oct 2015 21:31:49 UTC +00:00, 
     :updated_at => Fri, 23 Oct 2015 21:31:49 UTC +00:00, 
     :facility_id => 1, 
     :booking_id => nil 
    } 

Поэтому мне нужно фильтровать только по времени части поля, но я не знаю, как подойти к этому.

ответ

0

Как использовать часть временной метки в запросе, зависит от того, какая база данных вы используете. Например, с помощью PostgreSQL вы можете использовать функцию extract для группировки или фильтрации объектов в зависимости от времени суток.

Если вы не знаете, как это сделать, вы также можете посмотреть на gem groupdate (https://github.com/ankane/groupdate), который, как представляется, выполняет то, что вы ищете в агностическом режиме базы данных.

+0

Пример рельсов. Использование экстента postgres может быть .where ("extract (hour from start_time) in (6,7,8,9,10,11,12)") для временного интервала 6 am-12pm. – Gravatite

+0

Вышеупомянутый код действительно помогает. Драгоценный камень не так много, так как я не могу ничего сгруппировать с данными, насколько я могу судить. Он хорошо работает для диаграмм, которые плохо будут использоваться в будущем, но для записи записей с временным диапазоном я не вижу, как я буду использовать драгоценный камень здесь. – Batman

+0

Я просто понял, что это не сработает. Часовые пояса будут проблемой. Возможно ли применить часовой пояс к столбцу, прежде чем проверять его? – Batman