2011-09-02 5 views
0

결과가 페이지 매김되어 사용자에게 표시되어야하는 다소 복잡한 SQL-Query가 있습니다. 여기서 자세히 설명하고 싶지는 않지만 간단하게하기 위해 모델의 모든 열 과 추가 열을 선택하기 만하면됩니다.이 열은 정렬 용도로만 사용됩니다. 일부 .join()'s.group()Ruby on Rails/will_paginate : 맞춤 컬럼 별 주문

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

, 드디어 관계에 .order().paginate를 호출합니다.

no such column: x 

이 will_paginate은 COUNT(*)을 할 것 때문에 발생하는 것 같습니다 : 나는 모델의 자연 열 중에 의해 주문하는 경우 I은 "인공"열 x에 의해 그러나 순서는, 레일이 나에게 오류를 제공하면 모든 것이 잘 작동 - 실제 데이터를 가져 오기 전에 단순히 처리해야하는 데이터의 양을 가져 오는 것입니다. 이 COUNT(*)- 문장은 ORDER BY x을 포함하는 원본 문장에서 생성됩니다. 문제는 이제 will_paginate가 문에 ORDER BY을 유지하지만 단순히 열 정의를 COUNT(*)으로 대체하므로 열 x을 찾을 수 없습니다.

Rails 3will_paginate 3.0.pre2을 사용합니다.

이 문제를 해결할 수있는 방법이 있습니까? 리터럴 코드 샘플 아닙니다 위의

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

당신은 당신의 카운트 쿼리를 조정할 필요가 있습니다 : 어떤 도움

들으

답변

0

수동으로 값을 전달하여 초기 카운트 쿼리를 비활성화 할 수 있습니다 귀하의 조인에 대한 정확한 결과를 얻으십시오. 이렇게하면 페이지 매김에 대한 복잡한 쿼리를 곧바로 처리 할 수 ​​있습니다.

+0

아하스 – DeX3