내 모델베이스의 데이터를 특정 순서로 정렬하고 싶습니다. 그것은 "예선, 중간 고사, 준결승, 결승"의 값을 가진 카테고리의에특정 데이터로 모델 정렬
Model: Grade
Table Column: category, value
values of category: Prelim, Midterm, Semi-finals, Finals
어떻게 테이블 학년 기반을 정렬 할 수 있습니까?
당신은 숫자를 교체해야내 모델베이스의 데이터를 특정 순서로 정렬하고 싶습니다. 그것은 "예선, 중간 고사, 준결승, 결승"의 값을 가진 카테고리의에특정 데이터로 모델 정렬
Model: Grade
Table Column: category, value
values of category: Prelim, Midterm, Semi-finals, Finals
어떻게 테이블 학년 기반을 정렬 할 수 있습니까?
당신은 숫자를 교체해야제안이 같은 모델을 분류 한 후
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(',')})")
자세한 내용은 여기 야 구문에 의해를
: 당신이 테이블에있는 번호로 교체 할 싶지 않는 경우
class Grade
...
default_scope -> { order('category ASC') }
...
end
Prelim, Midterm, Semi-finals 및 finals는 카테고리 값이므로 abl이되지는 않습니다. 지금 그들을 바꿀 수 있습니다. – fujisan
default_scope을 사용하지 않는 것이 좋습니다 : http://rails-bestpractices.com/posts/806-default_scope-is-evil –
default_scope는 Rails 4에서 그다지 진절머리 나지 않습니다. – sevenseacat
레일에서 어떻게 작동합니까? 2.3 – fujisan
@fujisan 제가 레일즈 버전과 관련이 없다고 생각합니다. order ("FIELD (category, # {CATEGORY_IN_ORDER.join (',')})")'Grade.where ("카테고리가 null이 아닙니다. 순수한 mysql 구문. –
이미 기본 범위로 사용했습니다. 솔루션에 다시 한번 감사드립니다. – fujisan