findとWhere
Ruby on Railsのfindとwhereは、Active Recordを使ってデータベースからデータを検索する際に使用されるメソッドだが、それぞれに違いがある。
find
- findメソッドは主に主キー(通常はid)を使って検索する。
- findメソッドは一致するレコードが見つかると、そのレコードのインスタンスを返す。
- 一致するレコードが見つからない場合、ActiveRecord::RecordNotFoundエラーが発生。
このエラーは通常、404エラーページを表示するために使用される。
例:
user = User.find(1) # idが1のUserを検索
where
- whereメソッドは、検索条件を指定してデータを検索する。
この条件はハッシュ、配列、または文字列で指定できる。 - whereメソッドは、一致するすべてのレコードのコレクションを返す。
このコレクションは、ActiveRecord::Relationオブジェクトとして返される。
これにより、チェーン可能なクエリが可能になる。 - 一致するレコードが見つからなくても、whereメソッドは空のコレクションを返し、エラーは発生しない。
users = User.where(name: 'John') # nameが'John'のすべてのUserを検索
まとめ
findは主キーを使った検索で一意のレコードを返し、見つからない場合にはエラーが発生する。
一方、whereは検索条件を指定して複数のレコードを返し、見つからなくてもエラーは発生しない。
また、whereはクエリをチェーンして、より複雑な検索を行うことができる。