Найти записи с Datetime, которые соответствуют сегодняшней дате - Ruby on Rails

Я полагаю, что эта проблема возникает из .svn файла. Это или неправильно в старом родителе, новом родителе или старом. Я попытался бы возвращаться назад к Вашей начальной точке. Используйте экспорт для получения чистой копии папки. Переместите чистую копию в новое местоположение, и используйте добавление и удалите, чтобы сделать перемещение. Это вручную делает то, что делает SVN, но он мог бы работать.

30
задан Ilya 19 March 2017 в 15:56
поделиться

3 ответа

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

Вы можете сделать это одним из двух способов. Вы можете выбрать диапазон времени от начала дня до конца или создать столбец date, чтобы помочь лучше сгруппировать данные.

Версия диапазона выглядит следующим образом:

@deals = Deal.where('start BETWEEN ? AND ?', DateTime.now.beginning_of_day, DateTime.now.end_of_day).all

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

49
ответ дан 27 November 2019 в 23:04
поделиться

Для тех, кто все еще находится на Rails 4:

Чтобы дополнить ответ not_a_patch выше, я бы использовал:

Deal.where(start: Time.zone.now.beginning_of_day..Time.zone.now.end_of_day)

, потому что Time.zone будет использовать UTC (то есть, как ваше поле даты и времени сохранено), а DateTime.now - нет.

> DateTime.now
=> Fri, 08 Sep 2017 11:28:21 -0400
> Time.zone.now
=> Fri, 08 Sep 2017 15:29:53 UTC +00:00
5
ответ дан 27 November 2019 в 23:04
поделиться

В Rails 5.1 введен помощник Date#all_day, который возвращает объект диапазона для заданной даты, поэтому вы можете просто написать:

Deal.where(start: Date.today.all_day)

Вы также можете использовать SQL DATE() функция для вашей цели, например:

@deals = Deal.where('DATE(start) = ?', Date.today)
51
ответ дан 27 November 2019 в 23:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: