1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[初心者] findとfind_byの違い わかりやすく解説

Last updated at Posted at 2019-06-13

皆さんは、findやfind_byを使い分けることはできていますか?

なんとなくでfindやfind_byをcontrollerで使っている人も多いかなと思います。

自分も使い分ける事ができておらず、つい最近まで、以下の画像の様にcontrollerに記載していました。
スクリーンショット 2019-06-13 21.31.39.png

しかし、エンジニアの方にちゃんと使い分けた方がいいよとアドバイスを頂いたので、そのアドバイスを踏まえた上で、実際に作っていく際、意識した方がいいfindやfind_byの特長について、以下で述べていこうと思います。

find、find_byの大きな違い

最も大きな違いは、find_byは、nilを返すという点です。
さっきの画像のように、idを用いてデータを取ってくることは多いと思います。

その時、
@micropost1 = Micropost.find_by(id: params[:id])
@micropost2 = Micropost.find(id: params[:id])
の2つの書き方ができます。

データがちゃんとある際、どちらもちゃんとデータを引っ張ってくる事ができますが、データがなかった際、対応が違ってきます。

@micropost1では、データが無ければ、エラーが返されますが、
@micropost2では、nilが返されます。

つまり、find_byだと、データがなかった際、@micropost2 = nilのまま、viewまでプロセスが走ってしまいます。
しかし、findを使えば、nilではなく、エラーが返されるので、viewまでプロセスが走ることはありません。

したがって、特段の理由がないのなら、show actionなどで、idでデータを引っ張ってくる際は、findを使う事がおすすめです。

そして、findでは、idでしか引っ張ってこれないという点も着目ポイントだと思います。id以外でデータを引っ張ってきたい時は、find_byを使いましょう!

1
1
0

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
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?