【问题标题】:Ruby on Rails/will_paginate: Ordering by custom columnsRuby on Rails/will_paginate:按自定义列排序
【发布时间】:2011-09-02 12:56:36
【问题描述】:

我有一个相当复杂的 SQL 查询,它的结果应该分页并显示给用户。我不想在这里详细介绍,但简单地说,我只是选择模型的所有列,和一个附加列,仅用于排序目的。

Note.select( ['notes.*', "<rather complicated clause> AS 'x'"] ).joins(...)...

在一些.join()'s.group() 之后,我终于在关系上调用.order().paginate。如果我按模型的任何自然列排序一切正常,但是如果我按“人工”列x 排序,rails 会给我错误:

no such column: x

这似乎是因为 will_paginate 似乎在获取实际数据之前执行了COUNT(*)-statement,只是为了获取它必须处理的数据量。这个COUNT(*)-语句(当然)是从原始语句生成的,其中包括ORDER BY x。现在的问题是,will_paginate 将ORDER BY 保留在语句中,但只是将列定义替换为COUNT(*),因此找不到列x

使用Rails 3will_paginate 3.0.pre2

有没有办法解决这个问题?

感谢任何帮助

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 will-paginate


    【解决方案1】:

    您可以通过手动传入值来禁用初始计数查询:

    total_entries = Note.select(...).joins(...).count
    Note.select( ... ).joins(...).group().paginate(:total_entries => total_entries)
    

    以上不是文字代码示例,您可能需要调整计数查询以获得正确的联接结果。这应该可以让您对分页进行直接的复杂查询。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-20
      • 1970-01-01
      • 2014-07-27
      • 2012-04-03
      • 1970-01-01
      相关资源
      最近更新 更多