【问题标题】:(will_paginate) Find the page a record is in(will_paginate) 查找记录所在的页面
【发布时间】:2011-06-28 22:03:14
【问题描述】:

我的设置:Rails 2.3.10、Ruby 1.8.7

我正在使用 will_paginate 插件,对于特定用户,我需要实现一个排行榜功能来显示他的评分所属的页面,有没有办法做到这一点?

更新: 理想情况下,这是在不首先返回所有记录的情况下完成的,这样做会否定使用 will_paginate 的主要好处。

【问题讨论】:

    标签: ruby-on-rails pagination will-paginate


    【解决方案1】:

    【讨论】:

    • 谢谢,虽然我忘了在我的帖子中提到一个关键点,但这个效果很好。正如尼克所说,这首先返回所有记录,这首先破坏了使用分页的目的,这将是一个巨大的表,无论如何使用 SQL 来完成这个?
    • User.select('count(*)').where("users.rating > ?", User.find(id).rating).order('users.rating DESC ') 只获取计数,并将其限制在表的顶部。您也可以将其限制在底部,但哪个更快当然取决于用户的评分和数据的分布。
    • 糟糕 Rails 2: User.find(:all, :select => 'count(*)', :order => 'rating DESC', :conditions => [rating > ? ', User.find(id).rating])
    • 正确的想法,但代码不起作用,这有效 User.count(:order => 'rating DESC', :conditions => ['rating > ?', User.find(id) 。评分])。感谢您的帮助。
    • 使用.index 不适用于will-paginate。例如,我有一个posts 关系。我想找到post 的索引。 posts.pluck(:id).index(post.id) => 101。因此,我计算出这篇文章在第 11 页(页面大小 = 10)。然而,当我进行分页时,它出现在第 18 页。我不知道为什么,但will-paginate 显然存在一些乱七八糟的行为。
    【解决方案2】:

    您知道每页显示了多少用户,并且您可以找出用户的排名,那么将排名除以每页的用户,然后将结果铺平,这不是简单的事情吗?

    【讨论】:

    • 其实我不知道用户的排名是多少,我必须确定也加上评分也不是连续编号的,希望有道理
    • 那么我认为您只需要按评级(降序)排序所有用户,然后在结果中找到您当前用户的索引(这是 jimworm 给您的链接) .一旦你完成了那部分,那么它只是一个划分和地板的问题。
    • 是的,虽然让所有用户回来否定了使用 will_paginate 的关键优势,但这会起作用。当表变大时,这将是一个很大的性能打击,它会。还有其他建议吗?
    猜你喜欢
    • 2013-09-12
    • 2012-11-02
    • 2017-04-30
    • 2010-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多