2010-11-20 4 views
0

User.last을 호출 할 때 활성 레코드 정렬이 id 인 것처럼 보입니다.액티브 레코드의 첫 번째 방법은 ID별로 정렬합니까?

User Load (1.4ms) SELECT * FROM 사용자

ORDER BY users.id DESC LIMIT 1 그러나 User.first를 호출 할 때이 주문 절을 사용하지 않습니다.

User Load (1.9ms) SELECT * FROM 사용자

LIMIT 1 그래서이 가장 낮은 ID를 가진 사용자를 반환 보장? 실용적으로 보이지만 MySQL이이를 보장하는지 잘 모르겠습니다.

또는 다음을 수행해야합니까 : User.first(:order => 'id') : 주문 절을 강제 적용합니다.

편집 : 이것은 정말로 MySQL 문제입니다. SELECT * FROM 사용자가 LIMIT 1 인 경우 ID가 가장 낮은 사용자를 돌려 주겠습니까?

답변

1

하지 액티브 기본적으로 않습니다,하지만 당신은 액티브의 default_scope 방법을 사용하여 모델의 기본 순서를 강제 할 수 있는지 확인하십시오

default_scope :order => "id ASC" 

또는 레일에 3

default_scope order("id ASC") 
+0

하지만 AR에 의한 ID 순서 지정은 기본적으로 mysql이 최신 상태로 레코드를 주문합니다 ... 아니면 내가 틀렸습니까? – mpapis

+0

나는 처음에 디폴트 순서로, AR은 아무것도하지 않고 DB에 순서를 맡긴다 고 추측 할 수있다.이 경우에는 "order ASC"에 대응하는 삽입 순서에 의한 MySQL 주문이 될 것이다. 마지막으로이 접근법은 작동하지 않으므로 AR은 "id DESC"를 사용합니다. 그러나 그것은 단지 추측입니다. – Thilo

0
이 같은를 반환합니다

결과는

select * from users limit 1 

입니다. rder 데이터. 즉 위에서 언급 한 주문 방법 중 하나를 추가해야합니다.

관련 문제