Railsの.whereと.findの比較
質問
私は
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では非推奨となっています (
関連リリースノートを参照
).
関連
-
[解決済み] pg gem をインストールしようとすると 'libpq-fe.h' ヘッダが見つからない
-
[解決済み] Ruby on Railsのデータベースをパージまたは再作成する
-
[解決済み] Ruby on Railsのマイグレーションでデータベースのカラムの名前を変更するにはどうすればよいですか?
-
[解決済み] Ruby on Railsで現在の絶対URLを取得するにはどうすればよいですか?
-
[解決済み] Rails 3.1 を使用して、「ページ固有」の JavaScript コードをどこに置くか?
-
[解決済み] Railsの:includeと:joinsの比較
-
[解決済み] 実行時にメソッドが定義されている場所を見つけるには?
-
[解決済み】Railsの認証トークンを理解する
-
[解決済み】Ruby on Rails。グローバル定数を定義する場所はどこですか?
-
[解決済み] Rails 5: lib ファイルを実運用環境で読み込む
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Rails。Ruby on Railsの移行でデータベースカラムの名前を変更するにはどうすればよいですか?
-
[解決済み】ActionController::InvalidAuthenticityTokenについて
-
[解決済み] どのようにrailsでラジオボタンを正しく使用するには?
-
[解決済み] rake db:migrateを使って1ステップだけロールバックする方法
-
[解決済み] Paramが無いか、値が空である。ParameterMissing in ResultsController#update
-
[解決済み] nil:NilClass の未定義メソッド `each'... なぜ?
-
[解決済み] Ruby: public static メソッドを作るには?
-
[解決済み] gemのアップデート後、"Asset was not declared to be precompiled in production "でテストが失敗する。
-
[解決済み] Heroku: 既存のrailsアプリにseeds.rbをプッシュする方法?
-
[解決済み] RSpecとCucumberの違いは何ですか?[クローズド]