首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Thinking Rails项目分页

问使用Thinking Rails项目分页
EN

Stack Overflow用户
提问于 2012-12-15 04:43:05
回答 3查看 1.1K关注 0票数 1

我正在做一个Rails项目,它为场所设置了分页(通过thinking ),我正在尝试为用户设置它。我试着尽可能地模仿场馆的功能。我遇到的问题是,我只能返回:per_page指定的结果数量,而不是查询的总结果。如果我将:per_page增加到超过总结果,我会显示所有结果和用于分页的链接数量,但它们都不起作用。

在我的控制器中,我正在做

代码语言:javascript
复制
@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函数

代码语言:javascript
复制
  def pagination_user(current_page, pages)
    return if pages == 0
    render :partial => 'pagination_user', :locals => { :current_page => current_page.to_i, :pages => pages }
  end

这是设置数字链接的部分

代码语言:javascript
复制
<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属性,而不是我实际从查询中返回的结果数量。任何洞察我可能会有什么潜在的问题,或我正在忽略的东西,我将不胜感激。

谢谢,

艾伦

EN

回答 3

Stack Overflow用户

发布于 2012-12-15 06:21:05

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

代码语言:javascript
复制
:count => User.search_count("", search_options) 

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

票数 0
EN

Stack Overflow用户

发布于 2013-03-01 22:37:44

让我告诉你我做了什么。在使用sphinx进行搜索之后,我以数组的形式获得记录的id,然后使用id使用.where()进行搜索

代码语言:javascript
复制
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])
票数 0
EN

Stack Overflow用户

发布于 2014-07-15 16:19:54

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

代码语言:javascript
复制
users_count = User.search(query, :per_page => 20, :page => params[:page]).populate.count 

因此,在sphinx结果上使用'total_entries‘来获得总记录数

代码语言:javascript
复制
users = User.search(query, :per_page => 20, :page => params[:page]).populate
users_count = users.total_entries
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13885980

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档