2012-10-06 5 views
6

created_at으로 주문하려는 Story이라는 모델이 있습니다. 내가 PostgreSQL을 사용 Heroku가, 내 응용 프로그램을 호스팅 한 이후, 나는 내 컨트롤러에 다음과 같은 한 :레일 : 잘못된 주문을 반환하는 Postgres에서 날짜순으로 정렬

@stories = Story.find(:all, :order => "DATE(created_at) DESC" , :limit => 11) 

나는 이것이으로, 생성 날짜별로 정렬 내 이야기의 첫 11 줄 기대 가장 최근의 이야기.

불행히도, 이것은 작동하지 않습니다. 대부분의 이야기는 올바르게 주문되었지만 처음 두 개는 뒤집습니다. 즉, 최신 기사가 목록에서 두 번째로 나타납니다.

왜 이렇게 될까요? 나는 내 결과가 전혀 주문되지 않았거나 잘못된 칼럼 (아마도 id 일까?)에 주문되었다는 부적절한 의혹을 가지고 있습니다. 그리고 지금까지는 색인 페이지에 표시 될 때 예상대로 주문한 것입니다. 예상대로 주문하려면 어떻게해야합니까?

누구나 신경 쓰이는 경우 색인보기는 이야기를 순서대로 표시하는 것입니다. 즉, (HAML) 경우 : created_at는 날짜 열임을

제가

의심 나는
- @stories.each do |story| 
    = render :partial => "event", :locals => { :event => story } 

EDIT 및 DATE(...) 함수는 시간 부분을 무시한다. 따라서 같은 날짜에 생성 된 요소를 임의의 순서로 반환합니다. 처음 두 이야기는 같은 날에 만들어졌지만 몇 시간 씩 따로 따로 작성 되었기 때문에 왜 '반전 된'것처럼 보일지 설명합니다. 이 경우 날짜와 시간 모두로 주문하는 올바른 구문은 무엇입니까? 내가 당신을 믿지

답변

10

원하는 : 3 + 레일

@stories = Story.find(:all, :order => "created_at DESC" , :limit => 11) 

업데이트 :

@stories = Story.order(created_at: :desc).limit(11) 
+0

그 트릭을했습니다. 감사. –

3

당신이 레일 3를 사용하는 경우, 나는 또한 당신이하는 것 멋진 새 쿼리 구문을 사용하는 것이 좋습니다 것입니다 be :

자세한 내용은 Active Record Query Interface을 참조하십시오.

+0

'.limit (11)'을 사용해 보았는데 레일스가 인식 할 수없는 구문에 대한 오류 메시지를 보냈습니다. –

관련 문제