Ruby
 Computer >> コンピューター >  >> プログラミング >> Ruby

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 より複雑なクエリを作成する方法

今度はこれを実践する番です。

読んでくれてありがとう🙂


  1. Ruby Mapメソッドの使用方法(例付き)

    Mapは、配列、ハッシュ、範囲で使用できるRubyメソッドです。 マップの主な用途は、データを変換することです。 例 : 文字列の配列が与えられた場合、すべての文字列に目を通し、すべての文字を大文字にすることができます。 または、Userのリストがある場合 オブジェクト… 変換できます 対応するメールアドレス、電話番号、またはその他の属性のリストにそれらを追加します Userで定義 クラス。 これを行う方法を正確に見てみましょう! ルビーマップ構文 マップの構文は次のようになります: array = [a, b, c] array.map { |string| string.

  2. Linuxでwatchコマンドを使用する方法と例

    Linuxのwatchコマンドは1つのことを行います。コマンドを繰り返し、結果を繰り返し出力して、変更を監視できるようにします。使用方法は次のとおりです。 watchコマンド構文 watchコマンドの構文は次のとおりです。 watch OPTIONS COMMAND 注: オプション 以下の表のオプションのリストである必要があります。これにより、ウォッチのデフォルトの動作が変更されます。 コマンド コマンド 監視するコマンドです 繰り返し実行する必要があります。これは、出力を監視します 見る 中断されるまで実行されます(したがって、 CTRL+Cを押して終了します ) オプション 時