2016-08-12 158 views
0

我有两个嵌套对象:RecruitmentUser has_many RecruitmentUserStatusLog。 RecruitmentUserStatusLog有一个称为状态的属性。我想选择具有状态='处理'的RecruitmentUserStatusLog和状态='已回答'的RecruitmentUserStatusLog的RecruitmentUsers。它不能只是其中之一。我尝试使用ActiveRecord的一些疑问,但我不知道这是否是最有效的方式。我试过这样:最佳查询选择嵌套对象

RecruitmentUserStatusLog.where(status: ['processed', 'answered']).pluck(:recruitment_user_id).group_by {|id| id}.values.select{|duplicate_id| duplicate_id.size > 1} 

的选择部分只是为了获得重复的id的发生(具有“已处理”状态的recruitment_user_id和具有状态“已回答”的recruitment_user_id)。

但我认为这是'很多工作,也许有一个更优雅的方式来做这个查询..我已经搜查,但没有找到它..任何人都可以帮助我吗?

+0

与StatusLogs开始出来的是什么我也做什么,你尝试过使用'.joins(:r_users)',而不是你去哪里'.pluck'? –

+0

是的,要使用连接我需要做相反的.. RecruitmentUser.joins(:日志)..但我不能建立查询,以带来我想要的结果.. –

+0

不是我的意思。如果你做了RecruitmentUserStatusLog.where(status:['processed','回答'])。joins(:recruitment_users)'等等,会发生什么? –

回答

1

试试这个

user_ids = RecruitmentUserStatusLog.where(status: ['processed', 'answered']) 
            .group(:recruitment_user_id) 
            .having("count(recruitment_user_id) > 1") 
            .count 
            .keys 

users = RecruitmentUser.find(user_ids) 
+0

这正是我想要的,谢谢! –