Я не особенно знаю Rails, но я предполагаю, что есть некоторый эквивалент для следующего примера SQL.
ВЫБЕРИТЕ СЧЕТЧИК (*) + 1 из всех строк, которые будут находиться перед рассматриваемой строкой.
Например, чтобы получить ранг предмета, чья оценка равна 75.0:
SELECT COUNT(*) + 1 as [rank] from my_table
WHERE score > 75.0
Если вы не знаете оценку предмета, но знаете другую идентификационную информацию:
SELECT COUNT(*) + 1 as [rank] from my_table
WHERE score > (SELECT score FROM my_table WHERE test_id = 123)
У этого побочного эффекта есть присвоение одного и того же ранга тестам, которые имеют одинаковый балл, но все же распределяют его правильно. Таким образом, у вас может быть один балл на 1-м ранге, затем два балла на 2-м ранге, затем следующий будет иметь 4-й ранг и т. Д. Если вам не нравится этот побочный эффект, вы можете использовать выражение WHERE, чтобы разделить их на test_id или имя и фамилия.
Это только подходящее решение для одного теста за раз. Если вы хотите оценить их все, вы можете также получить их все, набрать ORDER BY и самим их оценить.