your programing

Rails 3에서 최신 기록 찾기

lovepro 2021. 1. 5. 19:46
반응형

Rails 3에서 최신 기록 찾기


rails3의 테이블에서 최신 레코드를 찾는 방법이 있는지 궁금합니다.

감사

엘리엇


Post 모델이 주어지면 다음을 수행 할 수 있습니다. @post = Post.order("created_at").last

(내가 a를하지 않은 @post = Post.last이유는 항상 기본 키 (일반적으로 id) 를 기준으로 정렬하기 때문입니다 . 대부분의 경우 이것은 괜찮지 만 문제를 일으킬 수있는 시나리오 (예 : 사용자 정의 설정)가있을 것입니다. 레코드의 ID, 기본 키 순서 지정 / 자동 번호 지정에 영향을주는 데이터베이스 변경 등) created_at타임 스탬프 별로 정렬 하면 실제로 가장 최근 레코드를 얻을 수 있습니다.


dmarkow의 대답은 기술적으로 정확하지만 created_at에 대한 인덱스를 만들지 않으면 데이터베이스가 커짐에 따라 점점 더 느린 쿼리가 발생할 위험이 있습니다.

"id"열이 자동 증가 기본 키 (일 가능성이 높음)라는 것을 알고 있다면 정의에 따른 인덱스이므로 사용하십시오.

또한 AREL이 find (: last)에서 하나의 레코드 만 선택하도록 최적화되어 있지 않으면 모든 레코드를 선택한 다음 "last ()"메서드를 사용하여 마지막 레코드 만 반환 할 위험이 있습니다. 결과를 다음 중 하나로 제한하는 것이 더 효율적입니다.

MyModel.last(:order => "id asc", :limit => 1)

또는

MyModel.first(:order => "id desc", :limit => 1)

created_at트래픽이 충분히 높은 테이블을 사용하면 모호한 문제가 발생할 수 있습니다 .

예. 시험:

INSERT INTO table (created_at) VALUES ( NOW() );
INSERT INTO table (created_at) VALUES ( NOW() );

.. 동일한을 가질 가능성이 있으며 created_at해상도는 1 초에 불과합니다. 정렬은 특별한 순서없이 그들을 반환합니다.

마이크로 타임 값을 저장하고 정렬하는 것이 더 나을 수 있습니다.


예, .last 메소드를 사용할 수 있습니다.

따라서 모델이 Post라고 불리는 경우 :

>> Post.last
=> #<Post ...>

이름이 ModelName다음 과 같은 모델을 시도하십시오 .

record = ModelName.last

참조 URL : https://stackoverflow.com/questions/4870531/find-the-newest-record-in-rails-3

반응형