Что особенного в: условий => [a_field IN (.., .., ..)]? - PullRequest
0 голосов
/ 26 октября 2010

Следующие наборы результатов хорошо работают с will_paginate:

Members.all(:limit => 5).paginate(:page => params[:page])
Members.all(:conditions => ["member_no < 6"]).paginate(:page => params[:page])
Members.all.paginate(:page => params[:page])

Следующее не работает:

Members.all(:conditions => ["member_no IN (?)", [1, 2, 3, 4, 5]]).paginate(:page => params[:page])

Почему второй запрос плохо работает с paginate?Спасибо!

1 Ответ

0 голосов
/ 26 октября 2010

#paginate - это метод экземпляра, доступный в Array и ActiveRecord :: Base. Вы действительно должны делать это так:

Member.paginate(:page => params[:page], :limit => 5)
Member.paginate(:conditions => ["member_no < ?", 6], :page => params[:page])
Member.paginate(:page => params[:page])
Member.paginate(:conditions => {:member_no => (1..5)}, :page => params[:page])

Когда вы звоните #all, а затем #paginate, вы запрашиваете всех членов (всех 1 000 000), затем отбрасываете 99,999% из них, потому что вам нужны только первые 10. Это очень расточительно, если не сказать больше.

...