我想通过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条记录,我想把在同一天创建的记录分组成分离的数组!
答案 0 :(得分: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}
,但日期对我来说似乎更有用。
答案 1 :(得分:1)
我相信你想要的是(注意前与现在相比):
Client.where('created_at BETWEEN ? AND ?', 30.days.ago.utc, Time.now.utc)