2016-06-20 7 views
0

私はransackと仕事をしています。私は創造の年(ちょうど年、全年ではなく)で並べ替える必要があります。だから私はコントローラにこれを持っている: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"にする必要はありません –

関連する問題