2010-03-29 8 views
15

내 Rails 응용 프로그램에서 will_paginate gem을 사용하여 내 SQL 쿼리에서 페이지 매김을하고 싶습니다. 그게 가능하니? 이런 일을 시도했지만 작동하지 않습니다.will_paginate와 find_by_sql을 결합 할 수 있습니까?

@users = User.find_by_sql(" 
    SELECT u.id, u.first_name, u.last_name, 
    CASE 
     WHEN r.user_accepted =1 AND (r.friend_accepted =0 || r.friend_accepted IS NULL) 
     .........").paginate(
        :page => @page, :per_page => @per_page, 
        :conditions => conditions_hash, 
        :order => 'first_name ASC') 

그렇지 않은 경우이 방법을 권장 할 수 있습니까? 나는 내 페이지 매김을 쓰고 싶지 않다.

답변

46

사용 paginate_by_sql, 즉

sql = " SELECT * 
     FROM users 
     WHERE created_at >= '#{2.weeks.ago}' 
     ORDER BY created_at DESC " 
@users = User.paginate_by_sql(sql, :page => @page, :per_page => @per_page) 

은 일반적으로 임의의 파인더 paginate*으로 find* 대체하여 페이지 매김을 할 수있다.

-2

이 시도 : 당신이 사용하는 어떤 will_paginate 및 레일 버전

@users = User.find_by_sql 
@users = @users.paginate 

?

+5

이 페이징은'find_by_sql' 의해 반환 된 결과 집합에 적용 . 따라서 대규모 결과 집합을 처리해야하므로 시스템이 중복 컴퓨팅을 수행해야합니다. –

+0

입력 해 주셔서 감사합니다. –

-2

User.paginate_by_sql (SQL : 페이지 => PARAMS [: 페이지] : per_page> = 10) 솔루션에

+0

per_page 표시 각 페이지에 표시되는 페이지 수 –

관련 문제