У меня есть два вложенных объекта: RecruitmentUser, который has_many RecruitmentUserStatusLog. RecruitmentUserStatusLog имеет статус, называемый статус. Я хочу выбрать RecruitmentUsers, у которых есть RecruitmentUserStatusLog со статусом = 'обработанный' и RecruitmentUserStatusLog со статусом = 'ответил'. Это не может быть только один из них .. Я пробовал некоторые запросы, используя 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, который имеет статус «ответил»).
Но я думаю, что это «большая работа, и, возможно, есть более элегантный способ сделать этот запрос. Я искал, но не нашел его. Кто-нибудь может мне помочь?
Начиная с StatusLogs это то, что я хотел бы сделать также, вы пытались использовать '.joins (: r_users)' вместо того, где вы идете в '.pluck'? –
Да, чтобы использовать соединение, мне нужно сделать инверсию .. RecruitmentUser.joins (: log) .. но я не смог построить запрос, чтобы привести результаты, которые я хочу. –
Не то, что я имею в виду. Что произойдет, если вы выполните «RecruitmentUserStatusLog.where» (статус: ['обработан', 'ответил']). Joins (: recruitment_users) 'и т. Д.? –