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

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

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

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

Ruby on Rails

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

Q&A

解決済

2回答

5706閲覧

rails whereの複数の値での検索について

Mkato

総合スコア118

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2016/02/15 03:46

###前提・実現したいこと
railsのwhereの複数の値で検索させたいです。

###ソースコード
↓DBのXxxxxのカラムstatusからstatus: 30とstatus: 40両方取得してviewに渡したいと考えております。

ruby

1 def xxxxx 2 3 @xxxxx = Xxxxx.where(status: 30) 4 end 5

status: 30だけですと上記でいいのですが、同時にstatus: 40も取得したいと考えているのですがどうすればいいのかなと。。。

宜しくお願いします。

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

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

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

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

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

guest

回答2

0

次の例をご覧ください。
SQL の in や between を発行させることが可能です。

$ rails c Running via Spring preloader in process 2328 Loading development environment (Rails 4.2.5) Frame number: 0/20 [1] pry(main)> Order.all Order Load (28.9ms) SELECT "orders".* FROM "orders" ORDER BY ordered_at DESC +----+-----------+----------+-------+-------------------------+-------------------------+-------------------------+ | id | client_id | status | price | ordered_at | created_at | updated_at | +----+-----------+----------+-------+-------------------------+-------------------------+-------------------------+ | 2 | 1 | active | 200 | 2000-01-01 21:28:42 UTC | 2015-12-27 02:28:42 UTC | 2015-12-27 02:28:42 UTC | | 5 | 2 | payed | 210 | 2000-01-01 21:28:42 UTC | 2015-12-27 02:28:42 UTC | 2015-12-27 02:28:42 UTC | | 1 | 1 | received | 100 | 2000-01-01 02:28:42 UTC | 2015-12-27 02:28:42 UTC | 2015-12-27 02:28:42 UTC | | 3 | 1 | payed | 400 | 2000-01-01 02:28:42 UTC | 2015-12-27 02:28:42 UTC | 2015-12-27 02:28:42 UTC | | 4 | 2 | payed | 110 | 2000-01-01 02:28:42 UTC | 2015-12-27 02:28:42 UTC | 2015-12-27 02:28:42 UTC | | 6 | 2 | payed | 410 | 2000-01-01 02:28:42 UTC | 2015-12-27 02:28:42 UTC | 2015-12-27 02:28:42 UTC | +----+-----------+----------+-------+-------------------------+-------------------------+-------------------------+ 6 rows in set [2] pry(main)> Order.where(price: [100,400]) Order Load (0.2ms) SELECT "orders".* FROM "orders" WHERE "orders"."price" IN (100, 400) ORDER BY ordered_at DESC +----+-----------+----------+-------+-------------------------+-------------------------+-------------------------+ | id | client_id | status | price | ordered_at | created_at | updated_at | +----+-----------+----------+-------+-------------------------+-------------------------+-------------------------+ | 1 | 1 | received | 100 | 2000-01-01 02:28:42 UTC | 2015-12-27 02:28:42 UTC | 2015-12-27 02:28:42 UTC | | 3 | 1 | payed | 400 | 2000-01-01 02:28:42 UTC | 2015-12-27 02:28:42 UTC | 2015-12-27 02:28:42 UTC | +----+-----------+----------+-------+-------------------------+-------------------------+-------------------------+ 2 rows in set [3] pry(main)> Order.where(price: [100..200]) Order Load (0.2ms) SELECT "orders".* FROM "orders" WHERE ("orders"."price" BETWEEN 100 AND 200) ORDER BY ordered_at DESC +----+-----------+----------+-------+-------------------------+-------------------------+-------------------------+ | id | client_id | status | price | ordered_at | created_at | updated_at | +----+-----------+----------+-------+-------------------------+-------------------------+-------------------------+ | 2 | 1 | active | 200 | 2000-01-01 21:28:42 UTC | 2015-12-27 02:28:42 UTC | 2015-12-27 02:28:42 UTC | | 1 | 1 | received | 100 | 2000-01-01 02:28:42 UTC | 2015-12-27 02:28:42 UTC | 2015-12-27 02:28:42 UTC | | 4 | 2 | payed | 110 | 2000-01-01 02:28:42 UTC | 2015-12-27 02:28:42 UTC | 2015-12-27 02:28:42 UTC | +----+-----------+----------+-------+-------------------------+-------------------------+-------------------------+ 3 rows in set

投稿2016/02/15 13:04

katoy

総合スコア22324

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

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

Mkato

2016/02/15 16:17

ご回答有難う御座います。 ``` Order.where(price: [100,400]) ``` この書き方いいですね。コード短く、内容も分かりやすいです。 さっそく実装させて頂きました。 いつも本当に有難う御座います。
guest

0

ベストアンサー

Arelを使ってor条件をつけてあげれば良いかと思います。

Ruby

1x_table = Xxxxx.arel_table 2@xxxxx = Xxxxx.where(x_table[:status].eq(30).or(x_table[:status].eq(40))

Arelを使いこなせば、複雑なSQLを発行できるようになりますよ

投稿2016/02/15 03:58

rifuch

総合スコア1901

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

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

Mkato

2016/02/15 05:32

ご回答有難う御座います。 頂いた方法で解決しました。初めてArelを知りましたので大変勉強になりました。 本当に有難う御座います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問