В приложении Rails, как я могу запросить последний экземпляр конкретной модели с несколькими условиями?
class User
has_many: tests
class TestAttempt
belongs_to: user
belongs_to: test
class Test
has_many: test_attempts
Проблема в том, что каждый пользователь может пройти один тест любое количество раз.Каждая test_attempt хранится в TestAttempt
.Но мне нужно запросить только последнюю попытку конкретного теста.Итак, процесс выглядит следующим образом:
Find TestAttempt by user_id ---> Something like this ---> TestAttempt.where(user_id: user_id)
Then find the test_id's of the above query.
Then get the last instance of the TestAttempt for each Test for each User
Таким образом, мой вывод может выглядеть примерно так:
user1: test_1-last-attempt-marks: 28, test_2-last-attempt-marks-30
user2: test_1-last-attempt-marks: 18, test_2-last-attempt-marks-40
Сейчас я запрашиваю базу данных и добавляю результаты в массив для определенногопользователь, а затем цикл по каждому элементу массива и принимая последний экземпляр значения, как это:
def get_test_marks(user_id)
tests = Test.where(user_id: user_id).to_a
tests.each do |test|
#check the name and and add to array if not present, if present then delete the existing one and add new one until last for each test
end
Или
def get_test_marks(user_id)
test_attempts = TestAttempt.where(user_id: user_id).select('distinct test_id, marks')
Есть ли способзапрашивать непосредственно из базы данных последнюю попытку каждого теста для конкретного пользователя вместо написания кода вышеуказанным способом?