この記事ではmacOS Catalina10.15.6にインストールしたRuby 2.6.5を使っています。
findとfind_byについて曖昧なところがあったので、自分なりにまとめてみました。
find
- 引数には__id(主キー)__を指定します。
- 指定したidのレコードを取得するというイメージです。
- idが見つからない時は__例外(RecordNotFound)が返って来ます。__赤いエラーページが発生してしまうのですね。
- 引数を複数指定することも可能です。
モデル名.find(idデータ)
- 具体的には以下のように使います。
Item.find(1) # => idが1のレコードを返す
Item.find(1,3,5) # => 指定したidを配列で返す
find_by
- データは__1番最初に合致した1件のみ__取得できます。
- id以外のカラム名なども検索条件にできます。
- 条件に合致するものがないと__nil__を返します。取得データがなくてもfind_byの記述以降も処理を続けたい時に便利ですね。
- 条件は複数指定可能です。
モデル名.find_by(条件)
- 具体的には以下のように使います。
Article.find_by(title: 'hoge')
# => titleが'hoge'で最初に合致したデータを返す
Fruit.find_by(name: 'apple', color: 'red')
# => nameが'apple'でcolorが'red'のデータを返す
2つ条件を指定して1つだけ合致しなかった場合
Fruit.find_by(name: 'apple', color: 'blue') #=> nilを返す