Во-первых, то, как вы выполняете запросы к БД, совершенно неэффективно. Вы выполняете колоссальное количество (2 + 5 * количество различных testNames) запросов, чтобы это работало, каждый из них сканирует всю таблицу ! На большой таблице ваша БД наверняка захлебнется.
Я настоятельно рекомендую вам больше узнать о SQL, о том, как работает база данных и как ее правильно проектировать. Хорошим началом является запись в Википедии о создании базы данных , тогда вы можете пойти на что-то более последовательное .
В сыром SQL то, что вы пытаетесь достичь, возможно в одном тривиальном запросе :
SELECT testName, levelCompleted, COUNT(*) AS count
FROM test_details
GROUP BY testName, levelCompleted
# BTW, your field names don't follow rails convention...
# try to follow the conventions unless you have
# very good reasons not to do so.
это позволит получить все данные, необходимые для выполнения ваших расчетов, например:
testName | levelCompleted | count
-----------------------------------
testone | 1 | 10
testone | 2 | 10
testone | 3 | 15
testone | 4 | 3
testone | 5 | 2
testTWO | 1 | 10
testTWO | 2 | 15
testTWO | 3 | 4
# and so on... there's two gotcha though:
# - if there is no record for a particular
# level and testName, itwon't appear at all in this !
# - the order of the rows is not guaranteed,
# but you can enforce it with an ORDER clause
Тем не менее, в Rails вычисления могут оказаться немного хитрыми. У меня нет достаточно времени, чтобы развить это здесь, и я думаю, что это не помогло бы вам и не дать вам ответ «из коробки» ... Вы должны действительно углубиться в руководства по RoR, особенно о миграции , ассоциации и запросы .
Я остаюсь доступным, если у вас есть какие-либо вопросы.