Запрос последнего экземпляра с условием в Rails - PullRequest
0 голосов
/ 29 мая 2019

В приложении 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')

Есть ли способзапрашивать непосредственно из базы данных последнюю попытку каждого теста для конкретного пользователя вместо написания кода вышеуказанным способом?

1 Ответ

1 голос
/ 29 мая 2019
Test.all.group_by { |test|  
test.user_id}.flat_map { |test, data|  data.sort_by(&:created_at).last(1)
} 

Попробуйте этот обновленный код

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...