我在rails中做了一个简单的查询......
@person.visits
给出了记录列表......
[#<Person::Visit id: 244, date: "2015-02-25", place: "" >,
#< Person::Visit id: 248, date: "2015-02-28", place: "" >,
#< Person::Visit id: 249, date: "2015-03-26", place: "" >,
#< Person::Visit id: 250, date: "2015-03-29", place: "" >,
#< Person::Visit id: 251, date: "2015-04-17", place: "" >,
#< Person::Visit id: 254, date: "2015-04-21", place: "" >]
我想将结果组织成这样的
{"February 2015"=>[25,28], "March 2015"=>[26, 29], "May 2015"=>[17,21]}
我试图使用以下内容,这让我更接近,只是不知道如何以及何时收集日期,例如[25,28]然后按月分组。
@person.visits.group_by { |d| d.date.strftime("%B %Y") }
日期是&#34;日期&#34;数据库中的字段
答案 0 :(得分:0)
到目前为止,你是正确的,你所拥有的将返回一个月份和年份的哈希值作为关键字,并将数据中的RECORDS返回到与该组相对应的数组中。如果您只想要那些记录中的数字天数,则必须遍历它:
visits = @person.visits.group_by { |d| d.date.strftime("%B %Y") }
visits.each {|key,value| value.collect! {|rec| rec.due_date.strftime("%d")} }
这只是遍历散列的每个成员,获取记录数组并将它们转换为记录的日期部分。
如果您希望用零填充日期,即“01,02 ...”,请使用"%d"
如果您不想使用零"%e"
答案 1 :(得分:0)
这实际上是一种痛苦。我不会使用group_by
,而是手动构建哈希:
@person.visits.inject({}) do |hash, visit|
key = visit.date.strftime("%B %Y")
value = visit.date.day
if hash[key]
hash[key] << value
else
hash[key] = [value]
end
hash
end
这将创建所需的哈希值。