###前提・実現したいこと
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ページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答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
総合スコア22324
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
総合スコア1901
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
ご回答有難う御座います。
頂いた方法で解決しました。初めてArelを知りましたので大変勉強になりました。
本当に有難う御座います。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/02/15 16:17