私は (スフィンクスを考えて) 会場用にページネーションを設定する Rails プロジェクトに取り組んでおり、ユーザー用に設定しようとしています。会場の機能を可能な限り模倣しようとしました。私が直面している問題は、クエリの合計結果ではなく、:per_page で指定された数の結果しか返されないことです。:per_page を合計結果よりも多くすると、それらすべてが表示され、ページネーションのリンク数が表示されますが、機能しません。
私のコントローラーで私がやっている
@gender = params[:user][:gender] unless params[:user].blank?
@ethnicity = params[:user][:ethnicity] unless params[:user].blank?
@age = params[:user][:age] unless params[:user].blank?
@page = params[:page].blank? ? 1 : params[:page]
@users = User.matches_for_admin({
:gender => @gender,
:ethnicity => @ethnicity,
:age => @age,
:relationship => @relationship,
:per_page => 20,
}, @page)
@pages = @users[:count] / 20 + ((@users[:count] % 20) > 0 ? 1 : 0)
:per_page を 200 に設定すると、すべての結果が得られ、(ページネーションのために) ページのリンクが表示されますが、per_page が結果の合計よりも高いため、リンクは機能しません。
これは、ページネーションに使用しているヘルパー関数です
def pagination_user(current_page, pages)
return if pages == 0
render :partial => 'pagination_user', :locals => { :current_page => current_page.to_i, :pages => pages }
end
そして、これは数値リンクを設定するパーシャルです
<div class="fullWidthPanel lightFilter pagination">
<ul>
<li> Pages: </li>
<% (1..pages).each do |page| %>
<li>
<% if page == current_page %>
<%= page %>
<% else %>
<a href="<%= url_for_user_page page %>">
<%= page %>
</a>
<% end %>
</li>
<% end %>
</ul>
<span class="results">
<strong>
Showing results <%= 1 + (current_page-1)*20 %>
to <%= [current_page*20, @users[:count]].min %>
of <%= @users[:count] %>
</strong>
</span>
</div>
url_for_user_page は、ページネーションが機能するための検索オプションを持つように URL を設定するだけです。
私はスフィンクスを考えるのが初めてで、同じように設定したのに、なぜユーザーではなく会場で機能するのか混乱しています。得られる結果の量は、実際にクエリから返される結果の数ではなく、:per_page 属性に基づいているようです。私が抱えている可能性のある潜在的な問題や、見落としているものについての洞察をいただければ幸いです。
ありがとう、
アラン