RubyonRailsでスコープを使用する方法
Railsのスコープとは何ですか?なぜそれが役立つのですか?
まあ…
スコープは、scope
を使用してRailsモデル内で定義するカスタムクエリです。 メソッド。
すべてのスコープには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スコープを最も効果的な方法で使用する方法を学びました。
この新しい知識を実践することを忘れないでください。そうすれば、それがどのように機能するかを思い出すことができます。
読んでくれてありがとう。 🙂
-
RubyでStructとOpenStructを使用する方法
Rubyの構造体とは何ですか? 構造体は組み込みのRubyクラスであり、値オブジェクトを生成する新しいクラスを作成するために使用されます。値オブジェクトは、関連する属性を一緒に格納するために使用されます。 ここに例があります : Point 2つの座標(x &y 。 このデータはさまざまな方法で表すことができます。 いいね : 配列[10, 20] ハッシュ{ x: 10, y: 10 } オブジェクトPoint.new(10, 20) 複数のPointを使用する場合 、オブジェクトアプローチを使用することをお勧めします。 しかし… これら2つの値を一緒に格納するた
-
RailsアプリケーションでOmniAuth-Twitterを使用する方法
このチュートリアルでは、アプリケーションのユーザーがTwitterアカウントを使用してログインできるようにする方法を学習します。これを行うには、OAuthなどのツールを使用すると簡単になります。 OmniAuthのTwitter戦略を含むOmniAuth-Twitterを利用します。 飛び込みましょう! はじめに Railsアプリケーションを生成することから始めます。ターミナルから、コマンドを実行して実行します。 rails new Tuts-Social -T Gemfileを開き、ブートストラップgemを追加します。 #Gemfile...gem bootstra