質問では例として ID を使ったクエリを2回発行していますが、「.where(id: [*(1..2).to_a, *(3..4).to_a])」と1つに纏めることは可能ですか?
回答1件
0
ベストアンサー
シンプルに
Ruby
1c = a | b
2user =User.where(id: c.map(&:id))3
じゃ、ダメですか
Ruby
1irb(main):042:0> a =User.where(id:[1..3])2UserLoad(0.1ms)SELECT"users".*FROM"users"WHERE(("users"."id"BETWEEN1AND3OR1=0))3+----+------+-------------------------+-------------------------+4| id | name | created_at | updated_at |5+----+------+-------------------------+-------------------------+6|1| hoge |2018-05-2005:32:58UTC|2018-05-2005:32:58UTC|7|2| hoge |2018-05-2005:32:58UTC|2018-05-2005:32:58UTC|8|3| hoge |2018-05-2005:32:59UTC|2018-05-2005:32:59UTC|9+----+------+-------------------------+-------------------------+103 rows in set
11irb(main):043:0> b =User.where(id:[4..6])12UserLoad(0.1ms)SELECT"users".*FROM"users"WHERE(("users"."id"BETWEEN4AND6OR1=0))13+----+------+-------------------------+-------------------------+14| id | name | created_at | updated_at |15+----+------+-------------------------+-------------------------+16|4| hoge |2018-05-2005:32:59UTC|2018-05-2005:32:59UTC|17|5| hoge |2018-05-2005:32:59UTC|2018-05-2005:32:59UTC|18|6| hoge |2018-05-2005:32:59UTC|2018-05-2005:32:59UTC|19+----+------+-------------------------+-------------------------+203 rows in set
21irb(main):044:0> c = a | b
22+----+------+-------------------------+-------------------------+23| id | name | created_at | updated_at |24+----+------+-------------------------+-------------------------+25|1| hoge |2018-05-2005:32:58UTC|2018-05-2005:32:58UTC|26|2| hoge |2018-05-2005:32:58UTC|2018-05-2005:32:58UTC|27|3| hoge |2018-05-2005:32:59UTC|2018-05-2005:32:59UTC|28|4| hoge |2018-05-2005:32:59UTC|2018-05-2005:32:59UTC|29|5| hoge |2018-05-2005:32:59UTC|2018-05-2005:32:59UTC|30|6| hoge |2018-05-2005:32:59UTC|2018-05-2005:32:59UTC|31+----+------+-------------------------+-------------------------+326 rows in set
33irb(main):045:0> user =User.where(id: c.map(&:id))34UserLoad(0.2ms)SELECT"users".*FROM"users"WHERE"users"."id"IN(1,2,3,4,5,6)35+----+------+-------------------------+-------------------------+36| id | name | created_at | updated_at |37+----+------+-------------------------+-------------------------+38|1| hoge |2018-05-2005:32:58UTC|2018-05-2005:32:58UTC|39|2| hoge |2018-05-2005:32:58UTC|2018-05-2005:32:58UTC|40|3| hoge |2018-05-2005:32:59UTC|2018-05-2005:32:59UTC|41|4| hoge |2018-05-2005:32:59UTC|2018-05-2005:32:59UTC|42|5| hoge |2018-05-2005:32:59UTC|2018-05-2005:32:59UTC|43|6| hoge |2018-05-2005:32:59UTC|2018-05-2005:32:59UTC|44+----+------+-------------------------+-------------------------+456 rows in set
46irb(main):046:0> user.where(id:1)47UserLoad(0.2ms)SELECT"users".*FROM"users"WHERE"users"."id"IN(1,2,3,4,5,6)AND"users"."id"=148+----+------+-------------------------+-------------------------+49| id | name | created_at | updated_at |50+----+------+-------------------------+-------------------------+51|1| hoge |2018-05-2005:32:58UTC|2018-05-2005:32:58UTC|52+----+------+-------------------------+-------------------------+531 row in set
54