我有用户和Todos模型,用户有许多todos和todo属于用户,我需要找到在最后一天创建待办事项的用户,如果有,然后发送他们的电子邮件。我已经尝试了guide中的查询,但它没有返回任何记录,即使因为(我认为)日期格式:
User.includes(:todos).where(todos: { created_at: 1.day.ago})
我也试过了:
User.includes(:todos).where(todos: { created_at: 1.day.ago.to_date})
和
User.includes(:todos).where(todos: { "date(created_at) = ?", 1.day.ago.to_date})
但最后一个不起作用:
SyntaxError: unexpected '}', expecting end-of-input
我使用Postgres,created_at
是日期时间字段(默认rails时间戳)
在Psql中:
created_at | timestamp without time zone | not null
答案 0 :(得分:1)
根据帖子中的规格,你需要获得过去一天创建的待办事项,所以
以下提到的查询无效
User.includes(:todos).references(:todos).where("todos.created_at >= ? and todos.created_at <= ?", 1.day.ago.beginning_of_day, 1.day.ago.end_of_day)
由于1.day.ago给出了一个特定的时间戳,数据库会搜索相同的时间戳,即包括匹配的小时,分钟和秒。
因此,更好的方法是搜索覆盖整天的时间戳,从而提供范围将是最佳选择。
如下所述修改查询:
s=0;
for(i=1;i<n;i=i*2)
{
for(j=0;j<n;j++)
{
s=s+i*j;
}
s=s+1;
}
这将获取过去一天创建的待办事项,涵盖整天的时间。