IN句に複数カラム指定するSQLをActive Recordで表現する方法
概要
Ruby on RailsのActive Recordで、IN句に複数カラム指定するSQLを表現する方法。
SQL例
SELECT * FROM test_table WHERE (test_col1, test_col2) IN (('test1', 'test2'), ('test3', 'test4'));
Active Recordで表現する方法
test_arrays = [ ['test1', 'test2'], ['test3', 'test4'] ] test1 = test_arrays.map do | array | TestTable.where( test_col1: array[0], test_col2: array[1] ) end test2 = test1.reduce{|sum, v| sum.or(v)}
こちらの短縮版は、以下の通りになる。
test_arrays = [ ['test1', 'test2'], ['test3', 'test4'] ] test1 = test_arrays.map do | array | TestTable.where( test_col1: array[0], test_col2: array[1] ) end.reduce(&:or)