我有一个相当复杂的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 3
和will_paginate 3.0.pre2
。
有没有办法解决这个问题?
thx任何帮助
答案 0 :(得分:1)
您可以通过手动传递值来禁用初始计数查询:
total_entries = Note.select(...).joins(...).count
Note.select( ... ).joins(...).group().paginate(:total_entries => total_entries)
上述内容不是文字代码示例,您可能需要调整计数查询以获得正确的结果。这应该让你对分页进行直接的复杂查询。