在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')
是否有一种方法可以直接从数据库中查询特定用户每次测试的最后一次尝试,而不用上述方式编写代码?
答案 0 :(得分:1)
Test.all.group_by { |test|
test.user_id}.flat_map { |test, data| data.sort_by(&:created_at).last(1)
}
尝试此更新的代码