質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Active Record

Active Recordは、一つのオブジェクトに対しドメインのロジックとストレージの抽象性を結合するデザインパターンです。

Q&A

解決済

1回答

1704閲覧

rails whereで取得したactiverecordの配列を1つにまとめる

if_dap

総合スコア7

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Active Record

Active Recordは、一つのオブジェクトに対しドメインのロジックとストレージの抽象性を結合するデザインパターンです。

0グッド

0クリップ

投稿2018/05/19 06:11

編集2018/05/19 13:13

Userというテーブルがあるとして、
a = User.where(id: [1..2])

b = User.where(id: [3..4])
というactiverecordの配列2つがあるとして、この2つを1つにまとめるにはどうすればよいのでしょうか?

+.push等を使ったところ、結合後のものに.whereなどを使うことができません。

どのように結合すれば、.whereなどを使える状態のまま結合できるのでしょうか?

環境はRails4です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gouf

2018/05/19 06:34 編集

「やったこと」「できなかったこと」は書かれていますが、そのほかに、「本当にやりたかったこと(ゴールとする部分)」はなんでしょうか?
if_dap

2018/05/19 07:34

「どのように結合すれば、.whereなどを使える状態のまま結合できるか」です。わかりづらくてごめんなさい。修正しました。
gouf

2018/05/19 10:39

"結合" が何を指すのか よくわかりませんが、それは「User.where(id: [1..2]).or(User.where(id: [3..4])」という意味ですか? (Rails 5 に or メソッドがある)
if_dap

2018/05/19 13:13

はい。実現したいことはそうなのですが、環境がRails4です,,,
gouf

2018/05/20 06:42

質問では例として ID を使ったクエリを2回発行していますが、「.where(id: [*(1..2).to_a, *(3..4).to_a])」と1つに纏めることは可能ですか?
guest

回答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]) 2 User Load (0.1ms) SELECT "users".* FROM "users" WHERE (("users"."id" BETWEEN 1 AND 3 OR 1=0)) 3+----+------+-------------------------+-------------------------+ 4| id | name | created_at | updated_at | 5+----+------+-------------------------+-------------------------+ 6| 1 | hoge | 2018-05-20 05:32:58 UTC | 2018-05-20 05:32:58 UTC | 7| 2 | hoge | 2018-05-20 05:32:58 UTC | 2018-05-20 05:32:58 UTC | 8| 3 | hoge | 2018-05-20 05:32:59 UTC | 2018-05-20 05:32:59 UTC | 9+----+------+-------------------------+-------------------------+ 103 rows in set 11irb(main):043:0> b = User.where(id: [4..6]) 12 User Load (0.1ms) SELECT "users".* FROM "users" WHERE (("users"."id" BETWEEN 4 AND 6 OR 1=0)) 13+----+------+-------------------------+-------------------------+ 14| id | name | created_at | updated_at | 15+----+------+-------------------------+-------------------------+ 16| 4 | hoge | 2018-05-20 05:32:59 UTC | 2018-05-20 05:32:59 UTC | 17| 5 | hoge | 2018-05-20 05:32:59 UTC | 2018-05-20 05:32:59 UTC | 18| 6 | hoge | 2018-05-20 05:32:59 UTC | 2018-05-20 05:32:59 UTC | 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-20 05:32:58 UTC | 2018-05-20 05:32:58 UTC | 26| 2 | hoge | 2018-05-20 05:32:58 UTC | 2018-05-20 05:32:58 UTC | 27| 3 | hoge | 2018-05-20 05:32:59 UTC | 2018-05-20 05:32:59 UTC | 28| 4 | hoge | 2018-05-20 05:32:59 UTC | 2018-05-20 05:32:59 UTC | 29| 5 | hoge | 2018-05-20 05:32:59 UTC | 2018-05-20 05:32:59 UTC | 30| 6 | hoge | 2018-05-20 05:32:59 UTC | 2018-05-20 05:32:59 UTC | 31+----+------+-------------------------+-------------------------+ 326 rows in set 33irb(main):045:0> user = User.where(id: c.map(&:id)) 34 User Load (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-20 05:32:58 UTC | 2018-05-20 05:32:58 UTC | 39| 2 | hoge | 2018-05-20 05:32:58 UTC | 2018-05-20 05:32:58 UTC | 40| 3 | hoge | 2018-05-20 05:32:59 UTC | 2018-05-20 05:32:59 UTC | 41| 4 | hoge | 2018-05-20 05:32:59 UTC | 2018-05-20 05:32:59 UTC | 42| 5 | hoge | 2018-05-20 05:32:59 UTC | 2018-05-20 05:32:59 UTC | 43| 6 | hoge | 2018-05-20 05:32:59 UTC | 2018-05-20 05:32:59 UTC | 44+----+------+-------------------------+-------------------------+ 456 rows in set 46irb(main):046:0> user.where(id: 1) 47 User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" IN (1, 2, 3, 4, 5, 6) AND "users"."id" = 1 48+----+------+-------------------------+-------------------------+ 49| id | name | created_at | updated_at | 50+----+------+-------------------------+-------------------------+ 51| 1 | hoge | 2018-05-20 05:32:58 UTC | 2018-05-20 05:32:58 UTC | 52+----+------+-------------------------+-------------------------+ 531 row in set 54

投稿2018/05/19 19:04

編集2018/05/20 05:42
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

if_dap

2018/05/20 02:20 編集

cに対して`.map(&:id)`はできませんね ``` NoMethodError: undefined method `id' for #<User::ActiveRecord_Relation:0x00007fd728b9a198> ```
if_dap

2018/05/22 05:30

再起動したところ成功しました...ごめんなさい。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問