Ransack:按年份排序

时间:2016-06-20 21:49:52

标签: ruby-on-rails activerecord arel 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查询中。

你知道我怎么能实现这个目标吗?

1 个答案:

答案 0 :(得分:1)

当您对搜索结果执行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])