Rails指定Eager Loaded Association的条件

时间:2018-06-03 17:00:28

标签: ruby-on-rails postgresql eager-loading

我有用户和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

1 个答案:

答案 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;
}

这将获取过去一天创建的待办事项,涵盖整天的时间。