1

私は (スフィンクスを考えて) 会場用にページネーションを設定する 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 属性に基づいているようです。私が抱えている可能性のある潜在的な問題や、見落としているものについての洞察をいただければ幸いです。

ありがとう、

アラン

4

3 に答える 3

0

私が何をしたかお話しましょう。スフィンクスで検索した後、レコードのIDを配列として取得し、IDを使用して検索し.where()ます

ids = User.search(params[:search_query]).collect{|c| c.id} #will return #==> [1,2,3]
@users = User.where(:id => ids).paginate(:per_page => 10, :page => params[:page])
于 2013-03-01T14:37:44.120 に答える
0

Nvm私はそれを理解しました。検索で見つかったバーの数は、sphinx 検索から返された結果から取得されました (per_page に基づく)。ページネーションのカウントは、次の基準に基づいている必要がありました。

:count => User.search_count("", search_options) 

sphinx (per_page 値に基づく) で見つかった結果だけでなく、考えられるすべての結果を取得するようにします。

于 2012-12-14T22:21:04.627 に答える