Большая проблема с простым объектом ol Date
заключается в том, что он не содержит информации о времени. Таким образом, в вашем запросе, который у вас есть в настоящее время, вы получите все до указанной даты, так как запрос разрешит что-то вроде WHERE created_at <= '2013-09-27'...
. Один из способов, вы можете обойти эту проблему, не теряя при записи, чтобы просто добавить 1 день к объекту даты, например:
def total_by_date(my_date)
where{created_at <= (my_date + 1.day)}.count
end
В этом случае тоже вам не нужно беспокоиться о часовых поясах на всех; вы просто смотрите на часть даты.
** Редактировать **
В ответ на Ваш вопрос в комментарии:
Что касается почему + 1.day
работы, подумайте о дате, как это: my_date
приходит, выглядя как 2013-09-24
в запрос, но он в основном такой же, как 2013-09-24 00:00:00
. Это было бы так же, как дата-время/отметка времени, установленная в полночь 24 сентября. Итак, на простом английском языке, если ваше сравнение «дайте мне все до или до полуночи 24 сентября», вы получите каждый результат, который приземляется, и существует раньше, чем это конкретное время и дата, но ничего, что произошло позднее в день 24 сентября, не появится.
Следовательно, + 1.day
- та же самая «проблема» по-прежнему существует, за исключением того, что она работает в вашу пользу сейчас, потому что наш запрос теперь «что-то до или после полуночи 25 сентября».
Примечание: Технически, вы можете получить нежелательные матчи за все, что случилось быть создан ровно в полночь 25 сентября, но вы можете легко изменить ваше сравнение просто <
вместо <=
, чтобы решить эту проблему.
Я немного смущен о статье 'where'. Вызывается ли это 'total_by_date' как область видимости? Используете ли вы какие-либо драгоценные камни для запросов? –