2016-06-20 5 views
0

나는 샅샅이 모으고 있으며 나는 창조의 해 (일년, 전체 날짜가 아님)별로 분류해야한다.랜섬 (Ransack) : 연도 별 주문

@q = Book.search(params[:q]) 
@q.sorts = 'book_year' if q.sorts.blank? 
@books = @q.result(distinct: true) 
      .select('books.*, EXTRACT(YEAR FROM books.created_at) as book_year') 
      .page(params[:page]) 

을하지만 그것은 작동하지 않습니다 그래서 컨트롤러이 있습니다. 순서는 SQL 쿼리에 추가되지 않습니다.

어떻게 해결할 수 있습니까?

답변

0

ransack 결과에 대해 select 쿼리를 실행하면 데이터베이스에 대한 쿼리를 실행하여 레코드를 패치하므로 정렬 순서가 제거됩니다. 결과에 정렬을 적용하려면 select 절 다음에 order 절을 추가해야합니다.

@q = Book.search(params[:q]) 
@q.sorts = 'book_year' if q.sorts.blank? 
@books = @q.result(distinct: true) 
      .select('books.*, EXTRACT(YEAR FROM books.created_at) as book_year') 
      .order('book_year') 
      .page(params[:page]) 
+0

여러 정렬 링크가 있고 주어진 "book_year"항상 강제로 원하지 않는이 필요합니다. –