Rails where.firstとfind_byの違い

TeckRachoの記事より。

where.firstの場合、「 # ORDER BY "users"."id" ASC 」の処理も発生するためクエリ実行処理が重たくなるそうです。

Active RecordのようなORM(Obuject-Relational_Mapper)の場合、簡単にデータを取り出せるので裏側の処理は見えにくいですね。

あと、find_byとwhereの違いもよくわかっていなかったので調べてみました。

find_by

・返り値はレシーバーのオブジェクト(レシーバーは、(例)User.email の「左側」を指す)
・発行SQLにorder by id descが付与されない
・DB問い合わせを行う

Where

・返り値はActiveRecord_Relationのオブジェクト
・where().first、where().map()などデータを操作するタイミングでDB問い合わせを行う
・発行SQLにORDER BY "users"."id" ASCが付与される

ActiveRecord_Relationはメソッドが返すもの。

以下の記事が分かりやすかったです。


まだまだ勉強が足りないですね!

この記事が気に入ったらサポートをしてみませんか?