我正在处理搜索工作,我需要按年份(仅一年,而不是整个日期)进行排序。所以我在控制器中有这个:
@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 :(得分: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])