Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 活动记录、结果说明_Ruby On Rails_Activerecord - Fatal编程技术网

Ruby on rails 活动记录、结果说明

Ruby on rails 活动记录、结果说明,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,有人能解释一下吗 Post.where(:p_date => ((Time.now - 7.days)..(Time.now))).count -> 4507 Post.where(:p_date => ((Time.now - 7.days).beginning_of_day..(Time.now).end_of_day)).count -> 4794 而p_date只是日期类型,没有时间 谢谢如果p\u date是日期列,请将日期传递到查询中 Post.where(

有人能解释一下吗

Post.where(:p_date => ((Time.now - 7.days)..(Time.now))).count
-> 4507
Post.where(:p_date => ((Time.now - 7.days).beginning_of_day..(Time.now).end_of_day)).count
-> 4794
p_date只是日期类型,没有时间


谢谢

如果
p\u date
是日期列,请将日期传递到查询中

Post.where(p_date: (7.day.ago.to_date .. Date.today)).count
哪个使用此查询

从'posts'中选择COUNT(*),其中('posts`.'p_date`介于'2016-09-08'和'2016-09-15'之间)

如果您传入时间对象,数据库将自动与0:00:00时间(至少在mysql和postgres上)进行比较,这是您获取差异的来源。

您的时区设置是什么?如果您执行
Post.where(pdate:Date.today-7.days).count
这是否等于差值?时区为GMT+3@SteveTurczyn是的,它将给出所选范围内的第一个结果Post.where(:p_date=>((date.today-7.days)。开始日期…(date.today)。结束日期)。COUNT我正在使用Postgres,这是活动记录中的查询详细信息,第一个从“posts”where(“posts”)中选择COUNT()。“p_date”介于“2016-09-08 15:33:24.390596”和“2016-09-15 15:33:24.390711”)之间,第二个从“posts”中选择COUNT(),其中(“posts”。“p_date”介于“2016-09-07 21:00:00.000000”和“2016-09-15 20:59:59.9999”之间)似乎第二个queryRight中添加了一天,因此postgres也会将date对象强制转换为时间戳为00:00:00的datetime,并且由于您的两个查询涉及两个不同的时间范围,您将得到不同的答案。由于列是日期,如果您使用日期作为范围,您将得到一致且正确的答案。是的,您将是的。这是一个很好的解决方案。但主要原因是时区。主要原因是您在查询中使用了两个不同的时间(time.now与一天开始时)。无论时区设置如何,您仍然会遇到不同的结果。时间之所以重要,唯一的原因是因为您正在使数据库将列强制转换为时间。