どうも!
インストラクターのババです!
Railsでデータベースを扱うためのメソッドの中に「where」があります。
whereは非常によく使用するメソッドなのですが、ちょっと応用的な使い方をしようとすると、ど忘れしてググってと、時間を無駄にしてしまうことが多くあります。
ですので今回は
「そもそもwhere文ってどうやって書くの?」
「where文で配列で一括検索できなかったっけ?」
「whereで?ってでてくるけど何の意味があるの?」
「andとかorとかnotとか使いたい!」
などwhereについての悩みをお持ちの方のために、
whereの基本形
whereでの配列指定
whereでの比較
whereでのnot, or, and
についてしっかりまとめて解説していきたいと思います。
where基本形
まずはwhereの基本形です。
User.where(kind: 1)
この書き方でkindが1のユーザーを全て取得することができます。
よく似たメソッドにfindがありますが、findとの違いは条件に合う全てのレコードを取得できることにあります。
whereの書き方多すぎない?
他の解説サイトで
User.where(‘kind = 1’) User.where(‘kind = ?’, 1)
という書き方でも解説されていますが、where内に渡したい引数が一つの場合は最初に説明したハッシュで値を渡すようにしましょう。
理由は二つあります。
一つ目は「SQLインジェクション」という悪意のある攻撃を防ぐためです。
例えば
number = 1 User.where(‘kind = number’)
という文を書いたとします。
この文のようにwhere内の条件文字列内に変数を入れてしまうとそこを変更される可能性がでてきて、そこがプログラムの弱点となってしまうことがあります。
しかしハッシュで書くと自動的に弱点をカバーしたSQL文を発行してくれます!
二つ目は「書きやすさ」の面です。これは単純ですね笑
User.where(kind: 1)
と
User.where(‘kind = ?’, 1)
ならUser.where(kind: 1)の方が書きやすいです。
ただ、User.where(‘kind = ?’, 1)のような書き方は後から説明する、「and」「or」検索のときや、比較演算子で検索したいときに使うので頭に留めておくようにしましょう。
以上二つの理由から
値が一つの時はハッシュで!
と覚えておきましょう!