おそらく誰かが私に次のことを助けることができます:私はRails 5.0でwill_paginateを使っています。結果はElasticsearchから取得され、_scoreごとに注文されます。したがって、最初の一致は、検索クエリがあったものと一致する最も良いオブジェクトになります。それはすべて正常に動作します。Railsのwill_paginateで働く価値を覚えておいてください
最初のオブジェクトのスコアが最も高く、スコアに対して相対的に表示されるプログレスバーを表示することを計画しています。したがって、最初のマッチは100%に満たされ、2回目のマッチは(スコアが低い場合)より少なく埋められます。それはすべて私の現在のコードでも見つかります。
問題:
ページ1では、すべて正常に動作します。しかし、そのページ2や他のページをクリックすると、最初の最高スコアが失われています。その特定のページの最初の試合は、この時点以降の最高得点です。
コントローラでクエリを2回実行せずに最高スコアを覚えておくにはどうすればよいですか(特定のページで1回、最高スコアで1回)。
誰もがこの問題を解決するための素晴らしいテクニックを知っている可能性があります。
= 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
コントローラ
@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
ビューは、あなたの助けのためにどうもありがとうございます!
セッション変数です。 :Dありがとう、ありがとう! –