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

NVM 我想通了。搜索中找到的柱数取自 sphinx 搜索的返回结果(基于 per_page)。我必须让分页计数基于:

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

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

于 2012-12-14T22:21:04.627 回答
0

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

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

所以在狮身人面像结果上使用“total_entries”来获取总记录数

users = User.search(query, :per_page => 20, :page => params[:page]).populate
users_count = users.total_entries
于 2014-07-15T08:19:54.067 回答
0

让我告诉你我做了什么。使用 sphinx 搜索后,我将记录的 id 作为数组获取,然后.where()使用 id 进行搜索

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 回答