Rails Whereメソッドの使用方法(例付き)
Railsでは、モデルを介してデータベースにクエリを実行し、データにアクセスできます。
これは、 ActiveRecord
を使用して行うことができます メソッド。
where
のように 、 find
、または find_by
。
結果として :
-
find_by
を使用 、単一のレコードまたはnil
-
where
を使用 、ActiveRecord ::Relationship
オブジェクト -
find
を使用 、プライマリ列(通常はid
)で検出される単一のレコード )、見つからない場合は例外を発生させます
言い換えれば :
1つのレコード(特定のユーザー)が必要な場合は、 find_by
を使用してください 、複数のレコード(ユーザーのリスト)の場合は、 where
を使用します 。
しかし、 where
使い方はたくさんあり、初心者を混乱させることがよくあります。
問題ありません!
where
を使用するさまざまな方法を見ていきます Railsアプリケーションで。
基本的な場所の条件
where
を使用する目的 データベース内の情報をフィルタリングするクエリを作成して、必要な行のみを取得することです。
例 :
与えられたBook
モデル、 title
、 author
&カテゴリ
。
特定の著者によるすべての本、または特定のカテゴリで提出されたすべての本を調べたい場合があります。
ここに質問があります :
Book.where(category: "Ruby")
これにより、 category
を持つすべての書籍が返されます 「ルビー」の。
条件を組み合わせることもできます。
このように :
Book.where(category: "Ruby", author: "Jesus Castello")
これにより、両方の category
に一致する書籍が返されます & author
。
また、 where
を組み合わせることができます スコープ付き。
# scope definition class Book scope :long_title, -> { where("LENGTH(title) > 20") } end # controller code @books = Book.long_title.where(category: "Ruby")
ハッシュを使用する(フルーツ: "apple"
)、列が何かと等しいかどうかを確認できます。
しかし、平等を求めていない場合はどうなりますか?
次に、文字列を使用する必要があります。
Railsの場所:大なり記号と小なり記号
「より大きい」、「より小さい」などを確認したい場合は…
このようにしてください :
Book.where("LENGTH(title) > 20")
値を補間する必要がある場合…
このようにしてください :
Book.where("LENGTH(title) > ?", params[:min_length])
この?コード> は「プレースホルダー」と呼ばれ、「SQLインジェクション」攻撃を回避するためのセキュリティに使用されます。
別のオプションは、名前付きプレースホルダーを使用することです。
例 :
Book.where("LENGTH(title) > :min", min: params[:min_length])
これは疑問符のプレースホルダーほど一般的ではありませんが、多くの補間値を含むクエリには役立つ可能性があります。
どこで使用するか、どこで、または条件を使用するか
より複雑なクエリを見てみましょう。
条件が真でないことを確認したい場合は、 where
を組み合わせることができます not
で メソッド。
ここに例があります :
Book.where.not(category: "Java")
別の例 :
Book.where.not(title: nil)
これにより、 Book
が見つかります s title
nil
ではありません 。
OR条件はどうですか?
where
を組み合わせることができます または
を使用 2つ以上の条件のいずれかに一致する行を取得するメソッド。
仕組みは次のとおりです :
Book.where(category: "Programming").or(Book.where(category: "Ruby"))
これは、2つの where
を組み合わせたものです 1つにクエリします。
試してみてください!
RailsWhereINアレイの例
私たちが見たすべての例は、1つの特定の値を探しています。
ただし、複数の値を探すことができます。
どのように?
配列を使用する!
例 :
Book.where(id: [1,2,3])
これにより、これらすべてのIDを同時に検索する「IN」クエリが生成されます。
SELECT "books".* FROM "books" WHERE "books"."id" IN (1, 2, 3)
このクエリは、railsログにあります。
RailsがAssociationConditionに参加します
アソシエーション値に基づいて一致させる場合は、そのアソシエーションを joins
で使用できるようにする必要があります。 メソッド。
次に、これを行うことができます :
Book.joins(:comments).where(comments: { id: 2 })
このクエリを使用すると、コメントのあるすべての本とコメント id
を取得できます。 2
です 。
文字列バージョンの場合 :
Book.joins(:comments).where("comments.id = 2")
コメント
の場所 はテーブル名であり、 id
列名です。
WhereLIKE条件でテキスト内を検索する方法
検索機能を実装する場合は、部分一致を許可することをお勧めします。
これは「LIKE」クエリで実行できます。
ここに例があります :
Book.where("title LIKE ?", "%" + params[:q] + "%")
これにより、params( params [:q]
によって提供される検索テキストを持つすべてのタイトルが検索されます。 )、タイトル内の任意の場所。
非常に役立つクエリ!
パーセント記号とは何ですか ?
SQLでは、%
はワイルドカード文字です。
ビデオ:WherevsFind_Byの詳細
概要
Railsのwhere
の使い方を学びました ActiveRecord
をクエリするメソッド モデル!
含む :
- 複数の条件でフィルタリングする方法
- 配列を使用して複数の行を効率的に検索する方法
-
where
の使用方法または
と組み合わせて &not
より複雑なクエリを作成する方法
今度はこれを実践する番です。
読んでくれてありがとう🙂
-
Ruby Mapメソッドの使用方法(例付き)
Mapは、配列、ハッシュ、範囲で使用できるRubyメソッドです。 マップの主な用途は、データを変換することです。 例 : 文字列の配列が与えられた場合、すべての文字列に目を通し、すべての文字を大文字にすることができます。 または、Userのリストがある場合 オブジェクト… 変換できます 対応するメールアドレス、電話番号、またはその他の属性のリストにそれらを追加します Userで定義 クラス。 これを行う方法を正確に見てみましょう! ルビーマップ構文 マップの構文は次のようになります: array = [a, b, c] array.map { |string| string.
-
Linuxでwatchコマンドを使用する方法と例
Linuxのwatchコマンドは1つのことを行います。コマンドを繰り返し、結果を繰り返し出力して、変更を監視できるようにします。使用方法は次のとおりです。 watchコマンド構文 watchコマンドの構文は次のとおりです。 watch OPTIONS COMMAND 注: オプション 以下の表のオプションのリストである必要があります。これにより、ウォッチのデフォルトの動作が変更されます。 コマンド コマンド 監視するコマンドです 繰り返し実行する必要があります。これは、出力を監視します 見る 中断されるまで実行されます(したがって、 CTRL+Cを押して終了します ) オプション 時