状況:
<データ>
id | name | score |
---|---|---|
1 | A | 200 |
2 | B | 100 |
3 | C | 200 |
4 | D | 500 |
5 | E | 300 |
```controller | ||
def index | ||
@test = Test.order('score desc') | ||
end | ||
``` | ||
```html | ||
<table> | ||
<tr> |
</tr> <% @test.each.with_index(1) do |f,i| %> <tr> <td><%= i %></td> <td><%= f.name %></td> <td><%= f.score %></td> </tr> <% end %> </table> ``` 結果: |順位|名前|スコア| |:--:|:--:|:--:| |1|D|500| |2|E|300| |3|A|200| |4|C|200| |5|B|100|<th>順位</th> <th>名前</th> <th>スコア</th>
これではwith_indexで単純に番号を振っているだけなので、同率順位は考慮されません。
同率順位を考慮するにはどうしたらいいのでしょうか。
|順位|名前|スコア|※|
|:--:|:--:|:--:|
|1|D|500|
|2|E|300|
|3|A|200|
|4|C|200|←ここの順位を3or空欄にしたい|
|5|B|100|
※調べてみるとredisを使ってうんぬんと出てくるのですが、こちらプログラミング新入生でしてredisが何かさっぱりわかりません。もちろん追々勉強すべきでしょうが、今はあまり広範囲に手を付けたら混乱しそうで…
このredisなるものを使わないと同率順位を考慮したランキングの作成はできない(あるいはかなり複雑になる)のでしょうか???
同率順位を考慮するロジックは、スコア(x)の値以上のスコアが何件あるかを数えて+1すればいいと思いますが、これはredis以外では書けないのでしょうか???
jsで同じ値が入った<td>を取得して、その<tr>のtd:first-childの文字を消す、的なことはできないでしょうか。
または、他にもっとシンプルにできる書き方はないでしょうか。
よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー