所以我正在尝试这样做:
today = Date.today - 1
todaysReport = Report.where(:created_at => today).find_by_user_id(user.id)
问题是created_at是一个日期时间,因此找不到任何匹配项。有什么建议吗?
答案 0 :(得分:21)
你可能想要这样的东西:
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])
答案 1 :(得分:13)
在postgres中,您可以将时间戳转换为日期。例如:
Report.where("created_at::date = ?", Date.today - 1)
答案 2 :(得分:5)
您需要与午夜到下一个范围进行比较。 此外,这是制作自己的类方法的好选择 提高灵活性。
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)
答案 3 :(得分:1)
如果在应用程序配置中指定了时区,它也可以是TimeWithZone。要将Date发送到TimeWithZone,您必须执行Date.today.to_time.in_time_zone。
答案 4 :(得分:0)
在 Rails 5.1 及更高版本中,您可以使用all_day
实例方法,如下所示:
SELECT [Days_Since],[Rate] FROM [Change]
答案 5 :(得分:-4)
您是否尝试过使用#to_datetime
,哪些Rails会添加到Date
和Time
类?
Report.where(:created_at => today.to_datetime).find_by_user_id(user.id)
实际上,惊讶的AR并没有为你处理这个问题。