0

假设我有一个记录用户和导师之间关系的关系表。我想为每个用户检索最新的(即最新的)导师。

Relationship.selects("MAX(id) AS newest_relationship_id").group('user_id')

这成功返回,作为列 latest_relationship_id,每个用户的最新关系,但我如何确保 therapy_id 列将为该最新关系返回正确的相应治疗师?

4

1 回答 1

0

您可以收集特定导师的新关系 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)              
于 2013-03-21T15:35:36.663 回答