「whereメソッド」とは、RailsのActive Recordクラスであるモデルに対して簡単にクエリを作成できるためのメソッドの1つです。本記事では、初心者向けにwhereメソッドの基本的な使い方について解説します。
whereメソッドは、指定した条件に合致するレコードを取得するためのメソッドです。引数にはハッシュ形式で条件を指定します。
以下に、例としてUserモデルから年齢が20歳のユーザーを取得するコードを示します。
@users = User.where(age: 20)
このようにすることで、ageが20のユーザーを取得することができます。複数の条件を指定する場合には、複数のキー・バリューの組み合わせで指定します。
@users = User.where(age: 20, gender: 'male')
この場合、ageが20かつgenderがmaleであるユーザーを取得します。
whereメソッドでは、指定した条件をORでつなぐ場合や、比較演算子を使用する場合もあります。その場合は、ハッシュの値にハッシュを渡すことで指定します。
例えば、以下のコードはageが20または30のユーザーを取得するコードです。
@users = User.where(age: [20, 30])
また、以下のコードはageが20以上のユーザーを取得するコードです。
@users = User.where('age >= ?', 20)
ここでは、?を使用して、SQLインジェクションを防ぎつつ変数を埋め込んでいます。
whereメソッドで取得した結果は、Active Recordオブジェクトの配列として返されます。例えば、以下のコードは、Userモデルのnameが”John”のユーザーが存在するかどうかを判定するコードです。
@user = User.where(name: 'John').first
if @user.present? # Johnが存在する場合の処理
else # Johnが存在しない場合の処理
end
また、Active Recordオブジェクトの配列から必要な情報を取り出す場合には、eachメソッドやeach_with_indexメソッドを使用します。
@users = User.where(age: 20)
@users.each do |user| puts user.name
end
whereメソッドには、いくつかのオプションがあります。
whereメソッドでは、条件を複数指定することができます。指定した複数の条件は、AND条件で結合されます。
User.where(name: "John", age: 25)
上記の例では、nameが”John”かつageが25のユーザーを検索します。
また、OR条件で複数の条件を指定することもできます。この場合は、whereメソッドを複数回呼び出すか、arelを使用する必要があります。
User.where(name: "John").or(User.where(age: 25))
上記の例では、nameが”John”またはageが25のユーザーを検索します。
whereメソッドでは、以下のような比較演算子を使うことができます。
User.where("age > ?", 25)
上記の例では、ageが25よりも大きいユーザーを検索します。
User.where("created_at < ?", Time.now - 1.day)
上記の例では、created_atが1日前よりも古いユーザーを検索します。
whereメソッドでは、IN句を使うことができます。
User.where(id: [1, 2, 3])
上記の例では、idが1、2、3のユーザーを検索します。
whereメソッドでは、NOT句を使うことができます。
User.where.not(name: "John")
上記の例では、nameが”John”ではないユーザーを検索します。
whereメソッドは、Active Recordクラスであるモデルに対して簡単にクエリを作成できるためのメソッドです。複数の条件を指定することができ、比較演算子やIN句、NOT句を使うことができます。ぜひ活用してみてください