我有一个DataMapper :: Collection对象。它的每个条目都有created_at
属性。我想将条目渲染到html表中,每天一个表(我使用Sinatra)。
将所有内容呈现在一个表中是没有问题的,但我并不是每天都这样做。我想到了一个DataMapper :: Collection对象的数组,我只想迭代它并完成工作。但我不知道如何构建这样的数组:/
有谁知道如何解决我的问题,还是有人有不同/更好的方法? 提前谢谢!
答案 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']