2012-08-31 2 views
4

데이터베이스가 커서 will_paginate를 사용하여 쿼리 응답 시간을 줄이고 싶습니다.GROUP BY와 함께 will_paginate를 사용할 수 있습니까?

열을 기준으로 항목을 그룹화 한 다음 will_paginate를 사용하여 결과를 다른 페이지에 넣으려고합니다.

나는이

@list= Persons.find_by_sql(select).group_by {|t| t.gender} 
@detail= @list.paginate(:page => params[:page], :per_page => 30) 

을하려고하지만 나에게이 오류 제공 : (undefined method paginate for<Hash:0x3de9930>):

누구든지이 문제를 해결하는 방법을 알고 있습니까?

Because you already have to load all the users from the database in order to perform the group_by, my suggestion is simply to forget about pagination and output them as-is.

그것이 will_paginate를 사용하는 동안 GROUP_BY를 사용하는 아무 소용이없는 뜻 :

[추가 정보]를 will_paginate 포럼

사람이 말한다?

+1

[다음은 will_paginate로 해시 객체를 페이지 매김하는 방법입니다.] (http://stackoverflow.com/q/4280660/1013138), 단지 FYI. –

+0

'find_by_sql' 메쏘드가 AR 객체보다는 해시를 반환하는 쿼리의 원인 인 것처럼 보입니다. 'select' 변수에 전달하는 조건에 따라,'paginate' 메쏘드를 사용할 수 있도록 코드를 변경하여 AR 객체를 생성 할 수 있습니다. 액티브 레코드 쿼리에 대한 가이드를 참조하십시오 : http://guides.rubyonrails.org/active_record_querying.html – jordanandree

+0

@naliwajek 링크 덕분에, 그것은 매우 도움이됩니다! –

답변

0
@paginated_lists = Persons.find_by_sql(select).paginate(:page => params[:page], :per_page => 30) 
@details = @paginated_lists.to_a.group_by { |t| t.gender } 

시도해보십시오. 내게 효과가 있어야합니다. 페이지 매김을 위해 @paginated_lists를 사용하십시오.