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

RubyonRailsでスコープを使用する方法

Railsのスコープとは何ですか?なぜそれが役立つのですか?

まあ…

スコープは、scopeを使用してRailsモデル内で定義するカスタムクエリです。 メソッド。

すべてのスコープには2つの引数があります

  1. コードでこのスコープを呼び出すために使用する名前。
  2. クエリを実装するラムダ。

このように見えます

class Fruit < ApplicationRecord
  scope :with_juice, -> { where("juice > 0") }
end

スコープを呼び出した結果、ActiveRecord::Relationを取得します オブジェクト。

つまり、スコープをチェーンして組み合わせることができます!

Fruit.with_juice.with_round_shape.first(3)

Railsスコープについて学ぶことはまだまだあるので、このトピックを引き続き調べていきましょう。

スコープを使用するタイミング

スコープはかっこいいですが、いつ使用する必要がありますか?

例を見てみましょう。

def index
  @books = Book.where("LENGTH(title) > 20")
end

これはindexです タイトルが20文字を超える本を表示したいコントローラーアクション。

大丈夫です。

ただし、このクエリを他の場所で使用する場合は、コードが重複していることになります。

コードが重複していると、プロジェクトの保守が難しくなります。

このクエリをスコープに移動しましょう。

このように

class Book
  scope :with_long_title, -> { where("LENGTH(title) > 20") }
end

コントローラーのアクションは次のようになります

def index
  @books = Book.with_long_title
end

いいね!

引数付きのRailsスコープの使用方法

スコープに変数を導入して、より柔軟にすることができます。

方法は次のとおりです

class Book
  scope :with_long_title, ->(length) { where("LENGTH(title) > ?", length) }
end

疑問符(? )はプレースホルダーであり、lengthの値に置き換えられます 。これにより、コードがより安全になります。

デフォルト値が必要な場合

class Book
  scope :with_long_title, ->(length = 20) { where("LENGTH(title) > ?", length) }
end

試してみてください!

スコープとクラスメソッド

スコープは魔法や超特別なことは何もしていません。

それらは単なる方法です。

実際…クラスメソッドを使用して同じことを行うことができます!

このように

class Fruit
  def self.with_juice
    where("juice > 0")    
  end
end

ただし、クラスメソッドよりもスコープを使用することには設計上の利点があります。

理由は次のとおりです

  • スコープは、その構文により、よりクリーンなコードになります
  • スコープは1つの目的にのみ使用されるため、スコープを見つけた瞬間に何が得られるかがわかります。
  • スコープは他の方法と混合されていないため、簡単に見つけることができます

機能に関しては、唯一の違いは、スコープがActiveRecord::Relationを保証することです。 、およびクラスメソッドはそうではありません。

これにより、スコープが何も返さない場合のエラーを回避できます。

デフォルトのスコープを使用しないでください

デフォルトのスコープは、モデルに自動的に適用されるスコープです。

class Post
  default_scope { where(published: true) }
end

はい!

デフォルトのスコープはとても魅力的です。

ただし、定義したことを忘れたり、奇妙なエラーが発生したり、デバッグに貴重な時間を浪費したりするため、間違った選択になることがよくあります。

そうは言っても…

デフォルトのスコープで作業する必要がある場合は、unscopedを使用する必要がある場合があります 現在適用されているすべてのスコープを無効にする方法。

ビデオチュートリアルを見る

概要

よくできた!この記事を読んだ結果、Railsスコープを最も効果的な方法で使用する方法を学びました。

この新しい知識を実践することを忘れないでください。そうすれば、それがどのように機能するかを思い出すことができます。

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


  1. RubyでStructとOpenStructを使用する方法

    Rubyの構造体とは何ですか? 構造体は組み込みのRubyクラスであり、値オブジェクトを生成する新しいクラスを作成するために使用されます。値オブジェクトは、関連する属性を一緒に格納するために使用されます。 ここに例があります : Point 2つの座標(x &y 。 このデータはさまざまな方法で表すことができます。 いいね : 配列[10, 20] ハッシュ{ x: 10, y: 10 } オブジェクトPoint.new(10, 20) 複数のPointを使用する場合 、オブジェクトアプローチを使用することをお勧めします。 しかし… これら2つの値を一緒に格納するた

  2. RailsアプリケーションでOmniAuth-Twitterを使用する方法

    このチュートリアルでは、アプリケーションのユーザーがTwitterアカウントを使用してログインできるようにする方法を学習します。これを行うには、OAuthなどのツールを使用すると簡単になります。 OmniAuthのTwitter戦略を含むOmniAuth-Twitterを利用します。 飛び込みましょう! はじめに Railsアプリケーションを生成することから始めます。ターミナルから、コマンドを実行して実行します。 rails new Tuts-Social -T Gemfileを開き、ブートストラップgemを追加します。 #Gemfile...gem bootstra