2011-09-02 95 views
0

我有一个相当复杂的SQL查询,其结果应该分页并显示给用户。我不想在这里详述,但为了简单起见,我只选择了模型的所有列,和另一列,仅用于排序目的。Ruby on Rails/will_paginate:按自定义列排序

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

一些.join()'s.group()后,我终于呼吁关系.order().paginate。如果我任何模型的自然列顺序一切工作正常,如果我却被x“人工”列的顺序,铁轨给我的错误:

no such column: x 

这似乎发生,因为will_paginate似乎做一个COUNT(*)在获取实际数据之前,只需获取必须处理的数据量即可。这个COUNT(*) -statement(当然)是从原始语句生成的,其中包括ORDER BY x。现在的问题是,will_paginate将ORDER BY保留在声明中,但仅用COUNT(*)替换列定义,因此找不到列x。使用Rails 3will_paginate 3.0.pre2

有什么办法来解决这个问题?

THX对于任何帮助

回答

0

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

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

上面没有文字的代码示例,你可能需要调整您的数查询为您的加入获取正确的结果。这应该让你直接对分页进行复杂的查询。

+0

啊thx,那会 – DeX3