假设我有一个记录用户和导师之间关系的关系表。我想为每个用户检索最新的(即最新的)导师。
Relationship.selects("MAX(id) AS newest_relationship_id").group('user_id')
这成功返回,作为列 latest_relationship_id,每个用户的最新关系,但我如何确保 therapy_id 列将为该最新关系返回正确的相应治疗师?
假设我有一个记录用户和导师之间关系的关系表。我想为每个用户检索最新的(即最新的)导师。
Relationship.selects("MAX(id) AS newest_relationship_id").group('user_id')
这成功返回,作为列 latest_relationship_id,每个用户的最新关系,但我如何确保 therapy_id 列将为该最新关系返回正确的相应治疗师?
您可以收集特定导师的新关系 ID,并在子查询中使用它们:
mentor = Mentor.find(mentor_id)
newest_relationship_ids = Relationship.select("MAX(id)").group(:user_id)
mentor.relationships.
includes(:user). # eager load the user
where(:id => newest_relationship_ids).
map(&:user) # collect the user
您还可以使用子查询更有效地执行此操作:
mentor = Mentor.find(mentor_id)
newest_relationship_ids = Relationship.select("MAX(id)").group(:user_id).to_sql
mentor.relationships.
includes(:user).
where("relationships.id IN (#{newest_relationship_ids}).
map(&:user)