抱歉这个可怕的问题标题。我想要找到的是;有没有更好的方法,使用更少的红宝石和更多的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
答案 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))