![](/img/trans.png)
[英]How to get unique records from Active Record rails 4 based on a column
[英]getting unique records on the basis of specific associated column - rails active record associations
我有三种模式。 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
一种方法是通过Attempt
在User
和Question
之间添加关系。
然后映射user.questions
id以选择每次第一次有序尝试:
class User < ApplicationRecord
has_many :attempts
has_many :questions, through: :attempts
def last_attempts
questions.order(:id).distinct.map do |question|
attempts.where(question_id: question.id).order(updated_at: :desc).first
end
end
end
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.