【问题标题】:Ransack: Order by yearRansack:按年排序
【发布时间】:2016-06-20 21:49:52
【问题描述】:

我正在使用 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 查询中。

你知道我怎样才能做到这一点吗?

【问题讨论】:

    标签: ruby-on-rails activerecord arel ransack


    【解决方案1】:

    当您对 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])
    

    【讨论】:

    • 谢谢,但这不是我需要的,因为我有多个排序链接,我不想总是强制排序为“book_year”
    猜你喜欢
    • 2018-06-01
    • 2015-05-13
    • 1970-01-01
    • 1970-01-01
    • 2022-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-28
    相关资源
    最近更新 更多