Рельсы Дата После - PullRequest
7 голосов
/ 30 мая 2011

Мне нужно сделать запрос по меткам времени модели Rails (created_at и updated_at), чтобы найти все записи после указанной даты.При выполнении запроса:

Item.where("created_at > :date OR updated_at > :date", date: "2011-05-29")
> SELECT "items".* FROM "items" WHERE (created_at > '2011-05-29' OR updated_at > '2011-05-29')

Включает записи типа:

attributes: 
  created_at: 2011-05-29 16:07:10.664227
  updated_at: 2011-05-29 16:07:10.664229

Однако эта дата не превышает указанную.Любой простой способ исправить этот запрос?Спасибо.

Редактировать:

Я также пытался сделать:

Item.where("created_at > :date OR updated_at > :date", date: "2011-05-29 16:07:10")

С тем же результатом, но с добавлением отметки доли секундытакже дает правильный результат.

Ответы [ 4 ]

12 голосов
/ 30 мая 2011

Скажем, вы хотите, чтобы записи начинались 30 мая:

Затем найдите записи, которые> = 2011-05-30 00:00:00:

some_date = Time.now
Item.where("created_at >= :date OR updated_at >= :date", date: some_date.tomorrow.beginning_of_day)
3 голосов
/ 30 мая 2011

Я думаю, что проблема в том, что create_at и updated_at имеют дату и время, поэтому, если вы передадите только дату, по умолчанию время будет 00:00:00, а все, что прошло, явно больше. Итак, записи, которые вы видите, прошли после этой даты, так как время больше.

Посмотрите на свою точность, вы можете либо пропустить еще 1 день, и я покажу что-нибудь выше этого дня, даже большее на секунду, или просто проведу час как 23: 59: 59.

1 голос
/ 20 апреля 2015

Вы можете использовать мой драгоценный камень by_star , чтобы сделать это.

Post.after(date)
1 голос
/ 30 мая 2011

К сожалению, SQL не согласен с вами:

mysql> SELECT '2011-05-30 12:00:00' > '2011-05-30';
+--------------------------------------+
| '2011-05-30 12:00:00' > '2011-05-30' |
+--------------------------------------+
|                                    1 |
+--------------------------------------+

И для сравнения дат с датами и временем в MySQL есть это, чтобы сказать :

Значение DATEприведен к типу DATETIME путем добавления временной части как «00: 00: 00».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...