두 개의 열로 정렬하고 싶습니다. 하나는 DateTime ( updated_at)이고 다른 하나는 Decimal (Price)입니다.
먼저 updated_at로 정렬 한 다음 같은 날에 여러 항목이 발생하면 Price로 정렬하고 싶습니다.
두 개의 열로 정렬하고 싶습니다. 하나는 DateTime ( updated_at)이고 다른 하나는 Decimal (Price)입니다.
먼저 updated_at로 정렬 한 다음 같은 날에 여러 항목이 발생하면 Price로 정렬하고 싶습니다.
답변:
Rails 4에서는 다음과 유사한 작업을 수행 할 수 있습니다.
Model.order(foo: :asc, bar: :desc)
foo그리고 bardb의 열입니다.
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)
model하기 models때문에 사람이이 복수로 압니다 것이다. 단지 제안입니다.
:asc대신 해야합니다 asc:Model.order({price: :desc}, {date: :desc}, {price: :asc})
실제로 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.order(foo: :asc).order(:bar => :desc).order(:etc)합니까? SQL에서 order 절의 순서는 내가 실행할 때 얻는 것과 반대 .to_sql입니다.
이것들 중 어느 것도 나를 위해 일하지 않았습니다! 정확히 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)
:order => ["DATE(#{table_name}.updated_at)", :price](:price심볼입니다.)