12
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Ruby on Rails 〜同率順位も含めたランキング機能〜

Last updated at Posted at 2020-04-24

今回はいいね順に投稿内容を表示する方法を書いていきたいと思います
#前提
いいね機能を実装していること

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番目にいいねされた投稿

#概要

index.html.erb
  <% 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の値は変えずに普通に表示させてあげますですがこの後にも次のいいね数と比べるため前のいいね数に今のいいね数を代入してあげます

以上で同率順位の完成です!

コードの内容をみれば言いたいことを理解してくれる人もいるだろうと思い今回記事にしてみました
ご視聴ありがとうございます

12
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?