我有三个模型。User
,Question
和Attempt
。
每个User has_many :attempts
,
相似地, Question has_many :attempts
并Attempt belongs_to User
与Question
必需的:
我想要的是一种方法来返回用户对用户有关联尝试的每个问题的最后一次尝试。
我的意思是如果用户尝试了 q1、q2 并且每个问题有 3 次尝试,那么我的方法应该返回 q1 的最后一次尝试和 q2 的最后一次尝试。
现在:我在User
模型中创建了一个方法。
def last_attempts
return self.attempts.joins(:question).order("questions.id ASC ,attempts.updated_at DESC").select("DISTINCT ON (question_id) *")
end
错误:此方法返回重复的尝试。(针对该用户的每个问题的所有尝试)。q1 的所有 3 次尝试和 q2 的所有 3 次尝试
看起来您的查询中有一个不必要的连接。
您应该能够执行以下操作:
def questions_last_attempts
attempts
.select("DISTINCT ON (question_id) *")
.order(:question_id, created_at: :desc)
end
这应该生成以下 SQL:
SELECT DISTINCT ON (question_id) * FROM "attempts" WHERE "attempts"."user_id" = 1 ORDER BY "attempts"."question_id" ASC, "attempts"."created_at" DESC
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句