46806


今、以下のように、あるテーブル (たとえば、 `users`) の属性のタプルがあったとします。

[code]

    attr_pairs = [[1, 'foo'], [2, 'bar'], [3, 'piyo']]
    
[/code]

ここから、 sql でいうところの複数カラムの IN 句によって絞りこみをかけたいです。

[code]

    -- こんなデータが取りたい
    SELECT * FROM `users` WHERE (`attr1`, `attr2`) IN ((1, 'foo'), (2, 'bar'), (3, 'piyo'));
    
[/code]

これは、 Rails (Active Record) ではどのように実現されますか?


CC BY-SA 4.0
2018-07-21T08:32:19.077
46805
2018-07-21T08:32:19.077
754
question
ruby-on-rails rails-activerecord
Active Record で複数カラムの IN 検索を行いたい


複数カラム IN は rails では(一旦文字列を介さないかぎり)できません。

ただ、同等の検索結果は、Rails 5 以上であるならば、`or`を用いて実現できます。

[code]

    attr_pairs.map do |attr1, attr2|
      User.where(attr1: attr1).where(attr2: attr2)
    end.reduce(&:or)
    # => SELECT `users`.* FROM `users`
    #    WHERE ((`users`.`attr1` = 1 AND `users`.`attr2` = 'foo' OR
    #            `users`.`attr1` = 2 AND `users`.`attr2` = 'bar') OR
    #           `users`.`attr1` = 3 AND `users`.`attr2` = 'piyo')
    
[/code]


CC BY-SA 4.0
2018-07-21T08:32:19.077
46806
2018-07-21T08:32:19.077
754
46805
answer