Подтвердить что ты не робот

Сравнение даты с Datetime Created_at в rails3

Итак, я пытаюсь сделать так:

today = Date.today - 1
todaysReport = Report.where(:created_at => today).find_by_user_id(user.id)

Проблема создана_at - это datetime, поэтому она не найдет совпадений. Какие-нибудь предложения?

4b9b3361

Ответ 1

Вероятно, вы хотите что-то вроде этого:

yesterday = Time.now - 1.day
user = User.find(user_id)

todaysReport = user.reports.where(["created_at >= ? AND created_at <= ?", yesterday.beginning_of_day, yesterday.end_of_day])

Ответ 3

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

class Report
  # All reports created on the specified Date
  def self.created_on(date)
    where(['created_at >= ? AND created_at < ?', date, date + 1])
  end
end

# Find all reports created yesterday by our user
Report.created_on(Date.today - 1).where(:user_id => user.id)

Ответ 4

Он также может быть TimeWithZone, если часовой пояс указан в конфигурации приложения. Чтобы получить Date to TimeWithZone, вам нужно сделать как Date.today.to_time.in_time_zone.

Ответ 5

Вы пытались использовать #to_datetime, который Rails добавляет к классам Date и Time?

Report.where(:created_at => today.to_datetime).find_by_user_id(user.id)

На самом деле удивление AR не справляется с этим для вас.