今回はいいね順に投稿内容を表示する方法を書いていきたいと思います
#前提
いいね機能を実装していること
https://qiita.com/MitsuguSueyoshi/items/18fa5e49a27e727f00b4
こちらの記事を参照にランキング機能を実装していること
上に載せている記事のcontrolleの記述では3番目まで投稿されるようになっているので今回は同率順位をわかりやすく表示するためにlimitの値を7にします
変数の値は自分のプロダクトに添って変更しました(ご了承ください🙇♂️)
#はじめに
まず<% @all_ranks.each.with_index(1) do |ranking, i| %>
この記述によってそれぞれのいいねされた投稿内容がいいね順に並びます。<%= ranking.body %>
などにしてみるといいねが多い順に投稿されることが分かりますか?ですがいいねが同数の場合は先に投稿された内容が上の順位に来てしまいます。
今回はそこ順位を同率にしていきます!
i | ranking.body |
---|---|
1 | 1番いいねされた投稿 |
2 | 2番目にいいねされた投稿 |
3 | 3番目にいいねされた投稿 |
4 | 4番目にいいねされた投稿 |
5 | 5番目にいいねされた投稿 |
6 | 6番目にいいねされた投稿 |
7 | 7番目にいいねされた投稿 |
#概要
<% lastFavorite = 0 %>
<% j = 1 %>
<% @all_ranks.each.with_index(1) do |ranking, i| %>
<% if i == 1 %>
<% lastFavorite = ranking.favorites.count %>
<% end %>
<% if ranking.favorites.count != lastFavorite %>
<% j = i %>
第<%= j %>位
<%= ranking.body %>
いいね数:<%= ranking.favorites.count %>
<% lastFavorite = ranking.favorites.count %>
<% else %>
<% lastFavorite = ranking.favorites.count %>
第<%= j %>位
<%= ranking.body %>
いいね数:<%= ranking.favorites.count %>
<% end %>
<br>
<% end %>
#同率を考えるために
前のいいね数と今のいいね数を比べることで同率かそうでないかわかります。そのために前のいいね数を一時的に保存できる変数lastFavoriteを作ります。ちなみに変数名はなんでも構いません
次に順位を示す変数を決めてあげます。私はjにしました!!
###4~6行目
<% if i == 1 %>
<% lastFavorite = ranking.favorites.count %>
<% end %>
一番初めのいいね数を考えたときにその1つ前のいいね数の値はないのでそこに値を仮に入れておくためにその一つ前だけ今のいいね数にする
###7~13行目
<% if ranking.favorites.count != lastFavorite %>
<% j = i %>
第<%= j %>位
<%= ranking.body %>
いいね数:<%= ranking.favorites.count %>
<% lastFavorite = ranking.favorites.count %>
<% else %>
もし前のいいね数と今のいいね数が違うなら順位が変わったことを指すので変数jにiの値を入れます
その時のいいねがついている内容を表示して
最後に今のいいね数は次のいいね数と比べるためにに前のいいね数にします
###14~19行目
<% lastFavorite = ranking.favorites.count %>
第<%= j %>位
<%= ranking.body %>
いいね数:<%= ranking.favorites.count %>
<% end %>
もし前のいいね数と今のいいね数が同じなら同率の順位を示すのでjの値は変えずに普通に表示させてあげますですがこの後にも次のいいね数と比べるため前のいいね数に今のいいね数を代入してあげます
以上で同率順位の完成です!
コードの内容をみれば言いたいことを理解してくれる人もいるだろうと思い今回記事にしてみました
ご視聴ありがとうございます