迭代哈希键并根据属性查找关联记录

时间:2017-09-04 19:48:01

标签: sql ruby-on-rails activerecord

抱歉这个可怕的问题标题。我想要找到的是;有没有更好的方法,使用更少的红宝石和更多的ActiveRecord / SQL来做同样的事情?

Job.level_count.keys[0..2].map do |loi|
    job_company_id = Job.find_by(level_of_interest: loi).company_id
    Company.find(job_company_id)
end

2 个答案:

答案 0 :(得分:1)

你可以这样做:

Company.joins(:jobs).where(jobs: { level_of_interest: [ array, of, loi, values] }).uniq

答案 1 :(得分:1)

您可以使用#joins并将Company加入Job,然后在jobs.level_of_interest上进行查询。您的迭代可以用这样的单个查询替换

Company.joins(:jobs)
       .where('jobs.level_of_interest in (?)', Job.level_count.keys[0..2])
#=> SELECT `companies`.* FROM `companies` INNER JOIN `jobs` ON `jobs`.`company_id` = `companies`.`id` WHERE (jobs.level_of_interest in (5, 3, 2))