1. ホーム
  2. ruby-on-rails

Railsの.whereと.findの比較

2023-10-13 11:13:40

質問

私は Model.where メソッドは結果が一つであっても常に配列を返すのに対して Model.find メソッドはそうではありません。これには何か理由があるのでしょうか?私は Model.where はRails 3.Xから推奨されている関数だと思っていました。

を使うべきなのでしょうか? Model.find を使うべきでしょうか。 Model.where とするのでしょうか?

どのように解決するのですか?

  • where ActiveRecord::Relation (配列と同じように動作しますが、配列ではありません) を返し、これは コレクション のモデルオブジェクトのコレクションです。もし条件に合うものがなければ、単に空のリレーションを返します。

  • find (およびそれに関連する動的な find_by_columnname メソッド)は シングル モデルオブジェクトを返します。もし何も見つからなければ ActiveRecord::RecordNotFound 例外が発生します (ただし、動的な find_by_ メソッドでは発生しません)。

    一方 find は ID のリストが与えられると Relation ではなく Array を返します。 where を使うのが望ましいとされています(Rails 3以降)。多くの類似した find は現在 非推奨、または完全に削除されました。 .

ですから、もし単一のオブジェクトだけを必要とし、それを期待するのであれば find を使うのが簡単です。 Model.where.first .

旧来のハッシュオプションである find と多くの動的な find_ メソッドは、Rails 4.0では非推奨となっています ( 関連リリースノートを参照 ).