Как нарезать коллекцию 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']
Другие вопросы по тегам