使用created_at选择记录范围

Azz*_*rio 1 ruby sql activerecord ruby-on-rails

我想通过created_at属性选择一系列模型记录,我尝试了这个查询

Client.where('created_at BETWEEN ? AND ?', 30.days.from_now, DateTime.now.utc)
Run Code Online (Sandbox Code Playgroud)

但它返回一个空数组.

1.9.3-p125 :029 > Client.where('created_at BETWEEN ? AND ?', 30.days.from_now, DateTime.now.utc)
  Posting Load (1.0ms)  SELECT `clients`.* FROM `clients` WHERE (created_at BETWEEN '2012-09-22 16:30:04' AND '2012-08-23')
 => []
Run Code Online (Sandbox Code Playgroud)

此外,我想使用.day方法将此记录分组到数组数组中,我的意思是,如果我有10条记录,我想将在同一天创建的记录分组到分离的数组中!

Cal*_*son 5

Client.
  where(created_at: 30.days.ago..Date.current).
  group_by{|u| u.created_at.to_date}
Run Code Online (Sandbox Code Playgroud)

您可以传递where一组值,您希望在这些值之间获得结果(对于包含范围与排他范围,请查看..和之间的差异...).

此外,您可以通过调用对结果进行分组group_by,这将采用一种方法来调用,即.group_by(&:created_at)在我的示例中使用块.我使用了一个完整的块,因为您希望按日期而不是按特定时间戳分组结果.如果你真的想要一个月的日子而不是完整的日期,你也可以打电话.group_by{ |u| u.created_at.day},但这个日期对我来说似乎更有用.