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

[解決済み] 検索 vs 発見する by vs どこに

2022-02-09 11:17:36

質問

私はrailsの初心者です。レコードを検索する方法はたくさんあるようですね。

  1. find_by_<columnname>(<columnvalue>)
  2. find(:first, :conditions => { <columnname> => <columnvalue> }
  3. where(<columnname> => <columnvalue>).first

そして、どれも全く同じSQLを生成してしまうようです。また、複数のレコードを検索する場合も同様だと思います。

  1. find_all_by_<columnname>(<columnvalue>)
  2. find(:all, :conditions => { <columnname> => <columnvalue> }
  3. where(<columnname> => <columnvalue>)

どれを使えばいいのか、目安やおすすめはありますか?

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

編集する。 この回答は非常に古く、この投稿がなされた後、他のより良い回答が出ています。 詳細は@Hossam Khamisが投稿した以下のものをご覧になることをお勧めします。

あなたのニーズに最も適したものを使ってください。

find メソッドは、通常、IDで行を取得するために使用されます。

Model.find(1)

注目すべきは find は、指定した属性で項目が見つからなかった場合に例外をスローします。 使用方法 where (後述するように、属性が見つからない場合は空の配列を返します) 例外が発生するのを防ぐためです。

その他の使用法 find は通常このようなものに置き換わります。

Model.all
Model.first

find_by は、カラム内の情報を検索する際のヘルパーとして使用され、命名規則で対応づけられている。 例えば、カラムの名前を name のような構文になります。

Model.find_by(name: "Bob")

.where は、従来のヘルパーではうまくいかない場合にもう少し複雑なロジックを使用できるようにするためのキャッチオールであり、条件に一致する項目の配列 (あるいはそれ以外の場合は空の配列) を返します。