与思维狮身人面像Rails项目的分页

时间:2012-12-14 20:43:05

标签: ruby-on-rails ruby pagination thinking-sphinx

我正在开发一个为场地设置分页的Rails项目(通过思考sphinx),我正在尝试为用户设置它。我试图尽可能地模仿场地的功能。我遇到的问题是我只返回指定的结果数: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只是设置了网址以使分页的搜索选项有效。

我是思考狮身人面像的新人,我很困惑为什么它适用于场地而不是用户,当我让它们设置相同时。我得到的结果似乎是基于:per_page属性,而不是我实际从查询中获得的结果数。任何洞察我可能遇到的潜在问题或我所看到的东西都会受到赞赏。

谢谢,

艾伦

3 个答案:

答案 0 :(得分:0)

Nvm我明白了。搜索中找到的柱数取自狮身人面像搜索的返回结果(基于per_page)。我必须根据以下内容计算分页:

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

这样它就可以获得所有可能的结果,而不仅仅是使用sphinx找到的结果(基于per_page值)

答案 1 :(得分:0)

让我告诉你我做了什么。在我使用sphinx搜索后,我将记录的id作为数组获取,然后使用ids

使用.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])

答案 2 :(得分:0)

如果您使用sphinx搜索页面选项(page,per_page),您将获得分页结果的计数。因此,对于以下代码,即使结果有超过20条记录,您也会得到count = 20(与per_page计数相同)。

users_count = User.search(query, :per_page => 20, :page => params[:page]).populate.count 

因此,使用&total;全局&#39;在sphinx结果上得到总记录数

users = User.search(query, :per_page => 20, :page => params[:page]).populate
users_count = users.total_entries