1

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

Client.where('created_at BETWEEN ? AND ?', 30.days.from_now, DateTime.now.utc)

但它返回一个空数组。

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')
 => []

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

4

2 回答 2

5
Client.
  where(created_at: 30.days.ago..Date.current).
  group_by{|u| u.created_at.to_date}

您可以传递where一个您想要结果的值数组(对于包含范围与排除范围,请查找 和 之间的差异.....

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

于 2012-08-23T16:42:12.420 回答
1

我相信你想要的是(注意以前与现在):

Client.where('created_at BETWEEN ? AND ?', 30.days.ago.utc, Time.now.utc)
于 2012-08-23T16:38:12.640 回答