2016-03-26 1 views
0

Я устанавливаю мировой часовой пояс для каждого пользователя, как это:Возможно ли запрашивать записи за определенный день с использованием указанного пользователем time_zone?

around_filter :user_time_zone, :if => :current_user 

def user_time_zone(&block) 
    Time.use_zone(current_user.time_zone, &block) 
end 

Я создаю некоторые записи, и когда я осмотреть их, created_at поле, кажется, использует правильный TIME_ZONE, например, с «Каракаса "часовой пояс:

[#<TimeEntry:0x007f6658ed4e58 
    id: "89c12856-4180-41ba-be4c-e1d555cd4b5c", 
    description: "New timer", 
    created_at: Fri, 25 Mar 2016 11:51:43 VET -04:30, 
    updated_at: Fri, 25 Mar 2016 11:51:54 VET -04:30>, 
#<TimeEntry:0x007f6658ed4d18 
    id: "8d8598e1-910d-4d89-898e-3de3cdf021c1", 
    description: "Connecting the timer hours with projects", 
    created_at: Fri, 25 Mar 2016 12:30:11 VET -04:30, 
    updated_at: Fri, 25 Mar 2016 12:30:11 VET -04:30>, 
#<TimeEntry:0x007f6658ed4bd8 
    id: "29e67663-e538-41e3-ba4e-0d02d3431abc", 
    description: "Test completing 2 hours", 
    created_at: Fri, 25 Mar 2016 12:30:47 VET -04:30, 
    updated_at: Fri, 25 Mar 2016 12:31:08 VET -04:30>, 
#<TimeEntry:0x007f6658ed4a98 
    id: "2260c971-c4e0-4ae0-97df-672cdeeac65a", 
    description: "Working on project details", 
    created_at: Fri, 25 Mar 2016 12:50:55 VET -04:30, 
    updated_at: Fri, 25 Mar 2016 12:50:55 VET -04:30>, 
#<TimeEntry:0x007f6658ed4958 
    id: "bfe5189d-5124-47c9-ba6d-2f28a08e6c5f", 
    description: "Working", 
    created_at: Fri, 25 Mar 2016 19:44:07 VET -04:30, 
    updated_at: Fri, 25 Mar 2016 19:44:22 VET -04:30>, 
#<TimeEntry:0x007f6658ed4818 
    id: "23b3fd5d-8be4-40b7-a9b9-d48e1fe6816d", 
    description: "New timer", 
    created_at: Sat, 26 Mar 2016 19:51:10 VET -04:30, 
    updated_at: Sat, 26 Mar 2016 19:51:41 VET -04:30>] 

Имеются 5 записей в '2016-03-25' и 1 на '2016-03-26'. Я стараюсь, чтобы принести их в день, как это:

day = '2016-03-25' 
@project.time_entries.where("date_trunc('day', created_at) = ?", day).count 

Однако я получаю неправильные результаты, я получаю 4 записи на 25, 1 запись на 26 и более 1 по 27. Похоже, что поле created_at использует по умолчанию time_zone (это UTC, и есть смещение «+4: 30» от time_zone, на котором я тестирую это).

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

ответ

0

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

total_time = @project.time_entries.where(created_at: (day.beginning_of_day..day.end_of_day)).count