2011-09-02 50 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