Можно ли комбинировать will_paginate с find_by_sql?
В моем приложении Rails я хочу использовать will_paginate
gem для разбивки на страницы в моем 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')
Если нет, можете ли вы порекомендовать путь вокруг этого? Я не хочу писать свою собственную разбивку на страницы.
Ответы
Ответ 1
Используйте 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*
.
Ответ 2
Попробуйте следующее:
@users = User.find_by_sql
@users = @users.paginate
Какую версию will_paginate и rails вы используете?
Ответ 3
User.paginate_by_sql (sql,: page = > params [: page],: per_page = > 10)