ActiveRecord에서 반환 된 배열을 날짜 (또는 다른 열)별로 정렬
ActiveRecord 쿼리에서 반환 된 배열을 created_at
날짜 열 별로 정렬하려면 어떻게 해야합니까?
이것은 쿼리가 실행되면 발생합니다.
뷰에서이 일이 발생해야하므로 쿼리에서 수행하라고 말하지 마십시오.
Ruby에는 즉시 정렬이 지원됩니다.
sorted = @records.sort_by &:created_at
그러나 이것은 디스플레이와 많은 관련이 없으며 아마도 컨트롤러에 속합니다.
Ruby Enumerable 은 훌륭하지만 ActiveRecord 쿼리는 실제로 쿼리가 아직 평가되지 않은 ActiveRecord :: Relation을 반환하고 (Lazy Loading) order 메서드를 호출하여이 처리를 확장 할 데이터베이스로 오프로드 할 수 있습니다. Enumerable 기반 전략 보다 훨씬 낫습니다 .
정렬에 Enumerable을 사용하면 데이터베이스에서 페이지 매김을 수행하는 것도 혼란스러워집니다. 주문 전략이 뷰에 적용되는 것을 막는 것은 없습니다. 그러나 나는 이것을 모델의 범위에 두는 경향이 있습니다.
sorted = @records.order(:created_at)
컬렉션에 대해 sort를 호출하고 Ruby에 원하는 정렬 방법을 알려주는 코드 블록을 전달하면됩니다.
collection.sort { |a,b| a.created_at <=> b.created_at }
이걸보고 복잡성도 확인하세요.
Model.all.sort_by{|m| m.created_at} #=> O(log n)
#versus
Model.order(“created_at DESC”) #=> O(1)
ActiveRecord 배열을 정렬하는 가장 좋은 방법은 기본 방법 순서를 사용하는 것입니다.
@ users.order (: created_at)
이 경우 가장 빠르고 가장 적합한 솔루션입니다.이 경우 db에서 정렬 된 배열을 반환하고 클래스에서 다른 작업을 사용할 필요가 없습니다. 예를 들어 제안을 사용하면 sort_by
배열의 각 요소를 루프 던질 것입니다. 그 후에는 ActiveRecord 배열이 아니고 제 생각에는 멋지지 않습니다.
order
문자열과 합계를 사용할 수 있으며 매우 유용하며 여러 매개 변수를 사용합니다.
@ users.order ( 'created_at asc, first_name desc, last_name asc')
'Programing' 카테고리의 다른 글
작은 따옴표와 큰 따옴표가 모두있는 bash alias 명령 (0) | 2020.11.27 |
---|---|
webpack, ES6, ReactJS를 사용하여 JavaScript 파일 가져 오기 및 함수 호출 (0) | 2020.11.27 |
존재가 true로 설정되지 않은 경우에도 Rails 유효성 검사에 숫자가 필요함 (0) | 2020.11.26 |
javascript / jQuery에서 문자열을 숫자로 변환 (0) | 2020.11.26 |
NSMutableAttributedString에서 링크 색상 변경 (0) | 2020.11.26 |