选择嵌套对象的最佳查询

时间:2016-08-12 23:54:42

标签: ruby-on-rails activerecord

我有两个嵌套对象:RecruitmentUser has_many RecruitmentUserStatusLog。 RecruitmentUserStatusLog有一个名为status的属性。我想选择具有状态='已处理'的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的出现(recruit_user_id具有状态'已处理'和recruitment_user_id,其状态为'已回答')。

但是我认为这是很多工作,也许还有一种更优雅的方式来进行这种查询..我已经搜索过但没有找到它..有人可以帮助我吗?

1 个答案:

答案 0 :(得分: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)