Как нарезать коллекцию DataMapper в одну коллекцию в день?
У меня есть объект DataMapper::Collection. Каждая из его записей имеет created_at
имущество. Я хочу сделать записи в html-таблицах, по одной таблице в день (для этого я использую Sinatra).
Не было никакой проблемы вынести все в одну таблицу, но я не получал это делать каждый день. Я подумал о массиве объектов DataMapper::Collection, над которым я бы просто перебрал и выполнил свою работу. Но я не знаю, как построить такой массив:/
Кто-нибудь знает, как решить мою проблему, или у кого-то другой / лучший подход? Заранее спасибо!
1 ответ
У вас есть (как минимум) два варианта. Первое - позволить базе данных сделать всю работу за вас. Я не знаю о datamapper, но большинство картографов баз данных (!) Имеют функциональные возможности для группировки с использованием SQL GROUP GROUP. В этом случае вам придется использовать функцию базы данных, чтобы получить дату из отметки времени, а затем сгруппировать ее. Это самый быстрый вариант, и если вы и будущие сопровождающие знакомы с реляционными базами данных, вероятно, также лучше.
Второй вариант заключается в отображении в вашем коде. Я не могу сейчас придумать элегантную рубиновую штуку, но ты мог бы по крайней мере сделать:
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']