search
LoginSignup
0

More than 1 year has passed since last update.

posted at

Rails:find,find_by,whereについて簡単にまとめた

最初に

カレンダー企画2020の23日目
プログラミングの勉強を始めて3ヵ月程経ったので学んだことのメモをアウトプットとして記事に残します。
これからプログラミングの世界に入る人の手助けになれたら嬉しい限りです。
間違っていたり、言葉が違っていたり、誤解されるような言葉があったら教えてください^^
言葉を長々と読みづらかったら申し訳ありません。少しずつなれてがんばります。

find,find_by,whereについて

個人的に訳わからず調べて自分なりに解釈した内容です。
他にも細かく載っている記事はたくさんあると思うのでここでは大枠、捉え方ぐらいに思って貰えればいいかと^^;(詳しく書いてもどっかの受け売りでコピペになるのでね^^;)

find,find_by,whereこれらはDB(データベース)から必要な情報だけを取り出す為に必要な理解です。
WEBアプリケーションを作成するなら絶対どれかは使う。

これだけ覚える

(検索というのは私なりの解釈です。ご了承ください)

メソッド 検索範囲 取得するデータ
find id 1つ
find_by 指定したカラム 最初の1つ
where 指定したカラム すべて

find

これだけ覚える

id(主キー)を指定して、見つけた1レコードを取得する。

見つけられないとActiveRecord::RecordNotFoundというエラーが出る。

# インスタンス変数 = モデル名.find(主キー)

@post = Post.find(params[:id])

こんな感じで記述をします。

idに部分が1や2や3,,,nが入ってそれに関連しているものを取得してくる。
1だったら=> post.find(1)となってpostのid:1のデータを取得する。

find_by

これだけ覚える

findの役割に+αでid以外のカラムも指定できる

findは指定できる(検索できる)カラムがid限定でした。
find_byは指定できる(検索できる)カラムがid以外もOKになる。

検索結果とは同じ見つかった1レコードを取得してきます。
文字とかも指定できるが、1番最初に見つけたものだけが適応される。


#モデル名.find_by(任意のカラム名: 格納されている値)

@post = Post.find_by(title: "Qiita")

Postのtitleカラム内で「Qiita」と格納されているものを1つ取得する。

idで見つけるならfindを使う
それ以外ならfind_byを使う

where

これだけ覚える

find_byの役割に+αで取得するレコードが複数になる。

whereはfind_by同様に指定できる(検索できる)カラムがid以外もOK

検索結果が1つではなく該当するものすべてになる。


#モデル名.where(任意のカラム名: 格納されている値)

@post = Post.where(title: "Qiita")

find_byではtitleに「Qiita」とあるもの1つでしたが、
whereではtitleに「Qiita」とあるものすべてを取得します。

最後に

解釈の仕方が間違っていたらごめんなさい。
DBからデータを取得するので個人的には図書館で検索する機械とか漫喫にある本の検索機をイメージしましたね。
そうしたら理解できた気がしたので載せました^^

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
0