프론트에서 백엔드에 현재 길드의 유저 정보를 요청하는데, 그 유저들이 클래스로 정렬되어 있기를 원할 때는 어떻게 해야하는가?
해결
CASE 를 사용하자!!
실제 사용된 코드는 아래와 같다.
def self.priority_order
self.order(
# A Relational Algebra
Arel.sql(<<-SQL.squish
CASE
WHEN position = 'master' THEN '1'
WHEN position = 'officer' THEN '2'
WHEN position = 'member' THEN '3'
END
SQL
)
)
end
# 이후에는 아래처럼 사용하면 된다.
def self.for_members_ranking(guild_id, page)
self.where(guild_id: guild_id).priority_order.page(page).map { |membership|
membership.user.profile
}
end
여기서 주의할 건 Arel.sql(<<) 문인데, 이 부분은 레일즈 버전이 업 되면서 추가된 부분이다.