记住在 Rails 中使用 will_paginate 的价值

Remember value working with will_paginate in Rails

也许有人可以帮助我解决以下问题:我在 Rails 5.0 中使用 will_paginate,并且我读出了每页 24 个结果。结果取自 Elasticsearch,并按 _score 排序。因此,无论搜索查询是什么,第一个匹配项都将是最佳匹配对象。一切正常。

第一个对象的分数最高,我打算显示一个相对于分数填充的进度条。所以第一场比赛将填充到 100%,第二场比赛将(如果分数较低)填充较少。我当前的代码也能找到所有作品。

问题:

在第 1 页上一切正常。但是一旦我点击第 2 页或任何其他页面,最初的最高 _score 就会丢失。该特定页面的第一个匹配项是从这一点开始的最高分。

如果不在控制器中进行两次 运行 查询(一次针对特定页面,一次检索最高分),我如何才能记住最高分?

也许有人知道解决这个问题的妙招。

控制器

@users = current_user.search_more_like_this.paginate(:page => params[:page], :per_page => 24)
# Problem is that the highest score is recalculated once I change the page.
@highest_score = @users.first._score.to_f

查看

  = link_to user_path(user.slug) do
    .progressbar
      %div{:style => "width: #{(user._score/@highest_score)*100}%;"}
        %span{:id => "os" + user.username.to_s, :class => "slickdot"}
        %span{:style => "color: white;padding-left:15px;"}
          = user.username
          = user._score

非常感谢您的帮助!

你有几个选择。

  1. 最简单的就是把最高分扔进饼干里(不太安全)。

  2. 第二个最琐碎的是将最高分扔进签名的 cookie(更安全,只有 99.9% 防弹)

  3. 丢到session变量里。

还有更多,但它们可能比您目前的用例所需的要复杂得多。