如何将DataMapper Collection每天切成一个Collection?

时间:2012-11-18 20:55:04

标签: ruby database sinatra datamapper ruby-datamapper

我有一个DataMapper :: Collection对象。它的每个条目都有created_at属性。我想将条目渲染到html表中,每天一个表(我使用Sinatra)。

将所有内容呈现在一个表中是没有问题的,但我并不是每天都这样做。我想到了一个DataMapper :: Collection对象的数组,我只想迭代它并完成工作。但我不知道如何构建这样的数组:/

有谁知道如何解决我的问题,还是有人有不同/更好的方法? 提前谢谢!

1 个答案:

答案 0 :(得分:1)

你有(至少)两个选择。 第一个是让数据库为您完成工作。我不知道datamapper,但大多数数据库映射器(!)都具有使用SQL的GROUP BY进行分组的功能。在这种情况下,您必须使用数据库函数来获取时间戳之外的日期,然后对其进行分组。这是最快的选择,如果您和未来的维护者熟悉关系数据库,那么最好也是。

第二个选项是代码中的映射。我现在无法想出一个优雅的Ruby东西,但你至少可以做到:

mapped_result = Hash.new [] # initiates each new entry with empty array
mapper_collection.each do |one_record|
  mapped_result[one_record.created_at.strftime '%Y-%m-%d'] << one_record
end

然后你可以用

记录一天
mapped_result['2012-11-19']