2013-10-21 2 views
1

내 모델베이스의 데이터를 특정 순서로 정렬하고 싶습니다. 그것은 "예선, 중간 고사, 준결승, 결승"의 값을 가진 카테고리의에특정 데이터로 모델 정렬

Model: Grade 
Table Column: category, value 
values of category: Prelim, Midterm, Semi-finals, Finals 

어떻게 테이블 학년 기반을 정렬 할 수 있습니까?

당신은 숫자를 교체해야

답변

4

제안이 같은 모델을 분류 한 후

1 = Prelim 
2 = Midterm 
3 = Semi-finals 
4 = Finals 

과 @titibouboul에 의해. 당신은 할 수 있습니다.

class Grade 
    CATEGORY_IN_ORDER = ["Prelim", "Midterm", "Semi-Finals", "Finals"] 
    scope :ordered_by_category, lambda {"order(FIELD(category,#{CATEGORY_IN_ORDER.join(',')}))"} 
end 

다음 어디서나 당신은이 범위를 사용할 수 있습니다

Grade.ordered_by_category.where(YOUR_CRITERIA) 

당신은 범위 정의 싶지 않는 경우 : http://www.electrictoolbox.com/mysql-order-specific-field-values/

:

순서에 대한
Grade.where(YOUR_CRITERIA).order("FIELD(category,#{CATEGORY_IN_ORDER.join(',')})")  

자세한 내용은 여기 야 구문에 의해를

+0

레일에서 어떻게 작동합니까? 2.3 – fujisan

+0

@fujisan 제가 레일즈 버전과 관련이 없다고 생각합니다. order ("FIELD (category, # {CATEGORY_IN_ORDER.join (',')})")'Grade.where ("카테고리가 null이 아닙니다. 순수한 mysql 구문. –

+0

이미 기본 범위로 사용했습니다. 솔루션에 다시 한번 감사드립니다. – fujisan

0

: 당신이 테이블에있는 번호로 교체 할 싶지 않는 경우

class Grade 
... 
default_scope -> { order('category ASC') } 
... 
end 
+0

Prelim, Midterm, Semi-finals 및 finals는 카테고리 값이므로 abl이되지는 않습니다. 지금 그들을 바꿀 수 있습니다. – fujisan

+0

default_scope을 사용하지 않는 것이 좋습니다 : http://rails-bestpractices.com/posts/806-default_scope-is-evil –

+0

default_scope는 Rails 4에서 그다지 진절머리 나지 않습니다. – sevenseacat

관련 문제