Ruby on Rails : ActiveRecord를 사용하여 두 열로 정렬하려면 어떻게해야합니까?
두 개의 열을 기준으로 정렬하고 싶습니다. 하나는 DateTime ( updated_at
)이고 다른 하나는 Decimal (Price)입니다.
먼저 updated_at로 정렬 한 다음 같은 날에 여러 항목이 발생하면 가격으로 정렬하고 싶습니다.
MySQL을 사용한다고 가정하면,
Model.all(:order => 'DATE(updated_at), price')
다른 답변과의 차이점에 유의하십시오. updated_at
열은 정렬을 기준으로 할 그렇다면, 풀 타임 스탬프있을 것이다 일 이 업데이트 된 경우 타임 스탬프에서 불과 날짜 부분을 얻을 수있는 기능을 사용해야합니다. MySQL에서는 DATE()
.
Rails 4에서는 다음과 유사한 작업을 수행 할 수 있습니다.
Model.order(foo: :asc, bar: :desc)
foo
그리고 bar
db의 열입니다.
Thing.find(:all, :order => "updated_at desc, price asc")
트릭을 할 것입니다.
최신 정보:
Thing.all.order("updated_at DESC, price ASC")
Rails 3의 길입니다. ( @cpursley 에게 감사 드립니다 )
Active Record Query Interface를 사용하면 쿼리 를 주문 하려는 속성을 얼마든지 지정할 수 있습니다.
models = Model.order(:date, :hour, price: :desc)
또는 더 구체적으로 알고 싶다면 ( @ zw963에게 감사드립니다 ) :
models = Model.order(price: :desc, date: :desc, price: :asc)
보너스 : 첫 번째 쿼리 후에 다른 쿼리를 연결할 수 있습니다.
models = models.where('date >= :date', date: Time.current.to_date)
실제로 Active Record를 사용하는 방법에는 여러 가지가 있습니다. 위에서 언급되지 않은 것은 다음과 같습니다 (다양한 형식으로 모두 유효 함).
Model.order(foo: :asc).order(:bar => :desc).order(:etc)
더 장황 할 수도 있지만 개인적으로 관리하기가 더 쉽습니다. SQL은 한 단계로만 생성됩니다.
SELECT "models".* FROM "models" ORDER BY "models"."etc" ASC, "models"."bar" DESC, "models"."foo" ASC
따라서 원래 질문에 대해 :
Model.order(:updated_at).order(:price)
데이터 유형을 선언 할 필요가 없습니다. ActiveRecord는이 작업을 원활하게 수행하며 DB 엔진도 마찬가지입니다.
Model.all(:order => 'updated_at, price')
이것들 중 어느 것도 나를 위해 일하지 않았습니다! 정확히 2 일 동안 인터넷을 통해 상하를 본 후 해결책을 찾았습니다 !!
special_price 및 msrp를 포함하여 제품 테이블에 많은 열이 있다고 가정 해 보겠습니다. 이것은 우리가 정렬하려는 두 개의 열입니다.
좋아, 먼저 모델에 다음 줄을 추가하십시오.
named_scope :sorted_by_special_price_asc_msrp_asc, { :order => 'special_price asc,msrp asc' }
둘째, 제품 컨트롤러에서 검색을 수행해야하는 위치를 추가합니다.
@search = Product.sorted_by_special_price_asc_msrp_asc.search(search_params)
'Program Tip' 카테고리의 다른 글
레일이 생산 중인지 어떻게 알 수 있습니까? (0) | 2020.09.25 |
---|---|
iPhone에서 Simple Bootstrap 페이지가 응답하지 않음 (0) | 2020.09.25 |
활동에서 편집 텍스트 사이에 수평 제수 선을 넣는 방법 (0) | 2020.09.25 |
Eclipse가 Java를위한 최고의 IDE입니까? (0) | 2020.09.25 |
Android 앱이 포 그라운드에서 실행 중인지 어떻게 알 수 있습니까? (0) | 2020.09.25 |