2017-05-31 8 views
0

おそらく誰かが私に次のことを助けることができます:私は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 

ビューは、あなたの助けのためにどうもありがとうございます!

答えて

1

あなたはいくつかの選択肢があります。

  1. 最も重要なのは、最高のスコアをクッキー(安全ではない)に投げかけることです。

  2. は、2番目に自明は

  3. は、セッション変数にそれをトス署名したクッキー(安全、のみ99.9%の防弾)に最高のスコアを投げることになります。

さらに多くの機能が用意されていますが、現時点での使用例よりもはるかに複雑です。

+0

セッション変数です。 :Dありがとう、ありがとう! –

関連する問題