我正在做一个Rails项目,它为场所设置了分页(通过thinking ),我正在尝试为用户设置它。我试着尽可能地模仿场馆的功能。我遇到的问题是,我只能返回: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高于总结果。
这是我用来分页的helper函数
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属性,而不是我实际从查询中返回的结果数量。任何洞察我可能会有什么潜在的问题,或我正在忽略的东西,我将不胜感激。
谢谢,
艾伦
发布于 2012-12-15 06:21:05
Nvm我想通了。搜索中找到的条数取自sphinx搜索的返回结果(基于per_page)。我必须让分页的计数基于:
:count => User.search_count("", search_options) 这样它就可以得到所有可能的结果,而不仅仅是使用sphinx (基于per_page值)找到的结果。
发布于 2013-03-01 22:37:44
让我告诉你我做了什么。在使用sphinx进行搜索之后,我以数组的形式获得记录的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])发布于 2014-07-15 16:19:54
如果您使用带有页面选项( page,per_page)的sphinx搜索,您将获得分页结果的计数。因此,对于下面的代码,即使结果有超过20条记录,您也会得到count = 20 (与per_page计数相同)。
users_count = User.search(query, :per_page => 20, :page => params[:page]).populate.count 因此,在sphinx结果上使用'total_entries‘来获得总记录数
users = User.search(query, :per_page => 20, :page => params[:page]).populate
users_count = users.total_entrieshttps://stackoverflow.com/questions/13885980
复制相似问题