2010-12-12 2 views
0

블로그 엔진에 레일스를 사용하고 있습니다. 게시물이 게시 된 고유 한 달 및 연도를 기반으로 보관하는 보관 기능을 구현하고 있습니다.블로그 아카이브의 고유 날짜 선택

Scenario: Displaying an archive menu from distinct posts months and years 
    Given the following posts exists for the blog "Blondinbella": 
     | Title   | Published at   | 
     | Redbull   | 1 March 2010 11:00 | 
     | Tuesday outfit | 2 January 2010 11:00 | 
     | Monday outfit | 1 January 2010 11:00 | 
     | Another outfit | 1 December 2009 11:00 | 
    When I visit the blog "Blondinbella" 
    Then I should see "March 2010" in the archive menu 
    And I should see "January 2010" in the archive menu 
    And I should see "December 2009" in the archive menu 
    But I should not see "February 2010" in the archive menu 

내가 힘든 시간이를위한 최선의 방법을 파악하는 데 문제 :

다음은 오이 기능입니다. SQL 쿼리로 하드 코어에 들어가야할까요? 그렇다면 어떻게 보입니까? (PostgreSQL 사용)

아니면 순수한 레일즈를 사용하여 부드럽게 처리 할 수 ​​있습니까?

+1

을 " 하드 코어 "? – araqnid

답변

2

순수한 루비 방법 :

Post.all.group_by { |post| post.published_at.strftime("%B %Y") }.map { |group| group.first.strftime("%B %Y") } 

당신이 게시물의 많은 경우 부담을 줄 것입니다.

를 (당신이 자신을 그를 검색해야합니다, 그래서 나는 마음으로이 작업을 수행하는 방법을 모르는)

Post.select("DISTINCT foo AS month").map(&:month) 

날짜 형식을 뭔가로 foo 교체 : 그래서 당신은 SQL에서 그것을 할 수

0

postgresql을 사용하여 가장 유용한 date_trunc 메서드를 찾았습니다.

예 :

Post.select("DISTINCT date_trunc('month', published_at) as month").collect(&:month) 

나는 그것이 또한 절단하기 전에 해당 지역의 시간대로 날짜를 변환 할 AT TIME ZONE 구조를 사용하는 의미가 발견 될 SQL 쿼리를 사용

Post.select("DISTINCT date_trunc('month', published_at AT TIME ZONE 'NZST') as month").collect(&:month)