我正在开发一个为场地设置分页的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属性,而不是我实际从查询中获得的结果数。任何洞察我可能遇到的潜在问题或我所看到的东西都会受到赞赏。
谢谢,
艾伦
答案 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