Lawyer と Phone の 2 つのテーブルがあります。電話は市外局番と番号に分かれています。弁護士はたくさんの電話を持っています。電話のリストから電話と一致する電話を持っている弁護士を検索するクエリを作成したいと考えています。
電話が 1 台しかない場合は、次のように検索できます。
Lawyer.join(:phones).where(:area_code => area_code, :number => number)
問題は、リストに複数の市外局番があることです。だから私は本当にこのようなことをしたい:
lawyers = []
phones.each { |phone| lawyers += Lawyer.join(:phones).where(:area_code => phone[:area_code], :number => phone[:number]) }
ただし、多くのクエリを作成したくありません。単一のクエリステートメントで実行できませんか?
編集: これは、SQL のみを使用して同様のことを行う方法です (数字のリストが [{:area_code=>'555', :number=>'1234564'}, {:area_code=>'533', :番号=>'12345678'}])
select * from phones where (area_code, number) in (('555', '1234564'), ('533', '12345678'))
誰かがそれを ActiveRecord に翻訳できるなら、それは素晴らしいことです。