2017-09-04 26 views
0

恐ろしい質問のタイトルを申し訳ありません。私が見つけようとしているのは、より少ないルビを使用し、より多くの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 

答えて

1

あなたは#joinsを使用してJobCompanyに参加し、その後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)) 
1

あなたは行うことができます。

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

ありがとう!まだ '.joins'に慣れています –

+0

Yw、私はいつもそれらを使用する前に再確認する必要があります –

関連する問題