2012-11-18 1 views
0

DataMapper :: Collection 개체가 있습니다. 각각의 항목에는 created_at 속성이 있습니다. 나는 html 테이블에 항목을 렌더링하고 싶다. 하루에 하나의 테이블 (나는 Sinatra를 사용한다).DataMapper Collection을 하루에 하나의 Collection으로 잘라내는 방법은 무엇입니까?

모든 것을 하나의 테이블로 렌더링하는 데 아무런 문제가 없었지만 매일 그렇게하지 않았습니다. DataMapper :: Collection 객체의 배열을 생각해 보았습니다.이 객체를 통해 반복 작업을 수행했습니다. 그러나 나는 그런 배열을 만드는 방법을 모른다 :/

내 문제를 해결하는 방법을 아는 사람이 있습니까? 아니면 다른 사람/더 나은 접근 방법을 가지고있는 사람이 있습니까? 미리 감사드립니다.

+0

오래된 질문을 하루에 기록 얻을 수 있지만, 하나의 옵션은'Model.all.group_by & : created_at'를 사용하는 것입니다. 그러면 키와 배열을 값으로 갖는 해시가됩니다. – morbusg

+0

대단하군요! 아마도 바보 같은 질문에 대해 미안하지만 앰퍼샌드는 무엇을합니까? –

+0

여기 [Symbol # to_proc'] (http://ruby-doc.org/core-1.9.3/Symbol.html#method-i-to_proc)입니다. – morbusg

답변

1

두 가지 옵션이 있습니다. 처음으로은 데이터베이스가 작업을 수행하도록하는 것입니다. 나는 datamapper에 대해 모르지만 대부분의 데이터베이스 매퍼 (!)는 SQL의 GROUP BY를 사용하여 그룹화하는 기능을 가지고 있습니다. 이 경우 데이터베이스 함수를 사용하여 타임 스탬프에서 날짜를 가져온 다음 그룹화해야합니다. 이것은 가장 빠른 옵션이며 여러분과 장래의 메인테이너들이 관계형 데이타베이스에 익숙 할 때 가장 좋습니다.

두 번째 옵션은 코드에서 매핑하는 것입니다. 지금은 우아한 루비 것 가지고 올 수는 없지만 최소한 할 수있는 :

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'] 
+1

대단히 감사합니다! –