【问题标题】:How to order records by associaction with has_many如何通过关联 has_many 对记录进行排序
【发布时间】:2015-12-05 19:50:10
【问题描述】:

我有两个表,作者和书籍,书籍有一个出版日期,我想按作者最后出版的日期订购作者,我正在这样做includes(:books).where(blablabla).order('books.published_date DESC'),但它打破了 kaminari 的分页(每页 8 条记录, 9 要显示),我在第一页上得到了正确的记录,但在第二页上我得到了第一页的前两条记录加上正确的记录。

【问题讨论】:

    标签: sql ruby-on-rails activerecord kaminari


    【解决方案1】:

    您可能想看看Yap。您可以为books.published_date 定义一个别名并按该别名排序。请参阅example

    User.joins(:team).paginate(sort: {team: :asc}) # would sort by team.name
    

    如果您还需要访问它的任何属性以使用预加载,请使用 .includes(:team)

    【讨论】:

      【解决方案2】:

      试试这个:-

      Author.includes(:books).where(blablabla).order('books.published_date DESC')
      

      更新 1:-

      @authors = Author.includes(:books).where(blablabla).order('books.published_date DESC')
      @authors = @authors.page(params[:page)
      

      希望这可能会有所帮助!

      【讨论】:

      • 抱歉,从代码编辑器复制时错过了订单部分
      • 所以这正是我正在做的查询,它工作得很好,但不适用于 kaminari
      • 使用更新 1,我得到了第一页的正确记录,但第二个我从第一页得到了两条第一条记录,然后是最后一条(正确的一条)
      猜你喜欢
      • 2020-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-04
      • 1970-01-01
      相关资源
      最近更新 更多