Ruby on Rails / will_paginate:按自定义列排序

时间:2011-09-02 12:56:36

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

我有一个相当复杂的SQL查询,其结果应该分页并显示给用户。我不想在此详细介绍,但为了简单起见,我只选择模型的所有列,和其他列,仅用于排序目的。

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

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

no such column: x

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

使用Rails 3will_paginate 3.0.pre2

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

thx任何帮助

1 个答案:

答案 0 :(得分:1)

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

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

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