Можно ли объединить will_paginate с find_by_sql? - PullRequest
16 голосов
/ 29 марта 2010

В моем приложении на Rails я хочу использовать гем will_paginate для разбивки на страницы в моем запросе 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')

Если нет, можете ли вы порекомендовать способ обойти это? Я не хочу писать свою собственную нумерацию страниц.

Ответы [ 3 ]

48 голосов
/ 29 марта 2010

Использование 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)

Как правило, любой искатель может быть разбит на страницы путем замены find* на paginate*.

0 голосов
/ 14 мая 2015

User.paginate_by_sql (sql,: page => params [: page],: per_page => 10)

0 голосов
/ 29 марта 2010

Попробуйте это:

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

Какую версию will_paginate и rails вы используете?

...