Запрос Ruby on Rails по диапазону времени и даты (последние 24, 48 и т. Д. Часов) - PullRequest
5 голосов
/ 29 января 2010

Я пытаюсь создать запрос, который будет искать последние записи на основе столбца 'last_login_at'. Это поле даты и времени с часовым поясом (т.е. Time.zone.now) Когда я выполню

User.find(:all, :conditions => ["last_login_at < ?", 24.hours.ago])

Я ничего не получаю.

В качестве альтернативы я могу определить сегодня как Time.zone.today, а вчера как Time.zone.today - 1.day и беги

User.find(:all, :conditions => ["last_login_at between ? and ?", today, yesterday])

и все равно возвращает 0 результатов. Я знаю, что есть некоторые записи, которые попадают в эту категорию.

Ответы [ 2 ]

19 голосов
/ 22 сентября 2013

Старый вопрос, но вот новый синтаксис:

User.where(last_login_at: 3.days.ago..DateTime.now)
11 голосов
/ 29 января 2010

Убедитесь, что часовые пояса, которые вы записали в базе данных, и те, которые выводит ваше приложение rails, равны. Это может иногда вызывать проблемы. В противном случае попробуйте эту именованную область:

 class User < ActiveRecord::Base
   named_scope :last_loggedin_before, lambda { |time_ago| { :conditions => ['last_login_at   < ?', time_ago] } }
   named_scope :last_loggedin_within, lambda { |time_ago| { :conditions => ['last_login_at   > ?', time_ago] } }
 end

позволяет вам сделать:

 User.last_loggedin_before 24.hours.ago

или

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