2014-02-06 7 views
0

내 컨트롤러에서 내 사용자를 정렬하려고하는데 ID 번호로 정렬하려고했습니다. 내 질문은, 레일스는 자동으로 주문이 생성 될 때 ID를 할당합니까, 아니면 내 컨트롤러의 작성 액션에서 작성 기능에 추가해야합니까? 예를 들어 다음과 같이 말할 수 있습니까?레일스는 ID를 자동으로 할당합니까?

def index 
    @users = User.all.order(:WHAT TO PUT HERE???????) 
end 

공간에 id를 넣을까요? 내가 그렇게했다면 다른 곳에서 ID를 정의해야할까요 아니면 루비가 백엔드에서하는 일인가요?

답변

2

대부분의 경우 레일스는 id별로 레코드를 반환합니다. 그러나 데이터베이스 별 정렬이므로 Rails에 의존해서는 안됩니다.

명시 적으로 사용한다 ID로 정렬을 추가하려면 :

def index 
    @users = User.order(:id) 
end 

이드 자동으로 추가됩니다, 당신은 어디를 선언 할 필요가 없습니다.

+0

지금까지 내가 기본 데이터베이스의 자연 순서에 따라 정렬 알고있다. 기본 키 기반 정렬과 동일한 것은 아닙니다. –

2

레일즈는 이전을 통해 테이블을 만드는 데 도움이됩니다. 마이 그 레이션이 테이블을 생성 할 때 자동 증가에 기본 키 세트로 id 컬럼을 자동으로 추가합니다. 그래서 레코드를 생성하는 이유는 ID를 추가하는 데이터베이스이거나, 앞에서와 같이 마지막 ID에서 자동으로 +1하는 레코드입니다. 따라서 ActiveRecord를 사용하여 레코드를 만들 때 ID를 지정할 필요가 없습니다.

이제 주 질문 사항에 대해 : 해당 열로 오름차순 정렬 할 때 order 메서드에 열 이름을 전달할 수 있습니다. 하지만 all에 전화 할 필요는 없습니다.

그래서 그냥 이렇게 :

이상으로 낮은 IDS에서 정렬합니다
User.order(:id) 

. 반대로하려면 :

User.order("id DESC") 

이렇게하면 상위 ID부터 하위 ID까지 정렬하여 가장 최근에 생성 된 레코드를 제공합니다.

1

당신이 ID

@users = User.order(:id) #ASC default 

@users = User.order('id ASC') #ASC explicit 

@users = User.order('id DESC') #DESC explicit 
0

으로 사용자를 정렬하지 ... 그리고 결코 User.order('-id') 단항 마이너스 바로 가기를 잊고 싶다면 ...

관련 문제