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

Ruby on Rails 7.1:部分変数の厳密なローカル変数をマスターする

Rails パーシャルは何年も前から存在していますが、バッキング オブジェクト構造を持たない単なる ERB スニペットであるため、扱いにくい場合があります。

最近、ViewComponent や Phlex などのライブラリは、テンプレートにセマンティック構造を追加することでビュー層を改善しようとしています。これらは素晴らしいライブラリであり、私は個人的に ViewComponent に手を伸ばします。 私が取り組んでいるほぼすべてのプロジェクトで。そうは言っても、私は依然として、この謙虚な Rails 部分が多くのユースケースでうまく機能すると感じています。

Rails チームは常にサービスの改善に努めています。そこで、Rails 7.1 で導入された新機能である厳密なローカル機能を見てみましょう。

Rails の部分変数とローカル変数

任意のローカル変数を Rails パーシャルに渡すと、魔法のように使用できるようになります。

 

マークアップの大きなブロックがある場合、パーシャルがどの変数を受け入れるかを確認するのが難しいため、これは理想的ではありません。また、変数は動的に作成されるため、変数が欠落していても nil は返されません。 ただし、エラーが発生します。

icon としましょう。 上記の部分ではオプションでした:

 

次のようにレンダリングします。

 

ActionView::Template::Error が発生します 、メッセージ undefined local variable or method 'icon' for #<ActionView::Base:0x00000000023078> 付き .

icon という事実 がオプションであることも、読者にとっては明らかではありません。 Rails 7.1 までは、解決策は local_assigns を検査することでした。 注入されたすべてのローカル変数を含むハッシュ。

 

これにより、icon が原因で上記のエラーが修正されます。 変数は常に設定されるようになりました。

Rails 7.1 は、厳密なローカル変数の概念を使用して、部分変数のローカル変数の欠点に対処しようとしています。 .

Rails の厳密なローカルとは何ですか?

Rails 7.1 以降では、パーシャルの先頭にマジック コメントを記述して、受け入れるローカル変数とそのデフォルト値を定義できるようになりました。

 

Rails はこのコメントを解析し、定義された変数を部分的に設定します。これで、パーシャルが受け入れる変数とデフォルト値が読者にとって明らかに明白になります。

部分は上に示したようにレンダリングされるはずです。 title を除外してみてください。 呼び出しサイトから変数を取得して、何が起こるかを確認してください:

 

ArgumentError を取得します メッセージ missing local: :title 付き :以前よりもわかりやすいエラー メッセージ!

厳密なローカルを使用する場合

厳密なローカル関数は扱いにくい場合があるため、特にレガシー アプリで使用することは必ずしも良い考えとは限りません。

厳格なローカルユーザーに最適なユースケースを見てみましょう。ユーザーの詳細をカードに表示する部分があるとします。 ただし、最後にサインインした日時を確認できるのは管理者だけです。

 

このパーシャルは複数の変数を受け取り、オプションの変数も持つため、厳密なローカルに最適なケースになります。次のマジック コメントをファイルに追加すると、流し読みが大幅に簡単になります。

 

モデルに関連付けられたパーシャルの場合 (例:posts/_post.html.erb) )、そのようなパーシャルが単一の post を受け入れることは明らかです。 変数。このようなケースでは、厳格なローカルが必ずしも良い考えだとは思いません。

厳格なローカルの落とし穴

注意すべき注意点がいくつかあるため、全面的に厳密なローカルを使用することはお勧めしません。

コレクションの暗黙的なレンダリング

コレクションを暗黙的にレンダリングする場合:

 

Rails は _post を挿入します。 post に加えて 2 つの変数を含む部分的 変数。 Rails 7.1.2 より前は、エラーを防ぐためにこれらを手動で定義する必要がありました。

 

この問題は Rails 7.1.2 で修正され、これらの変数はオプションになりました (ただし、必要に応じて存在することを知っておくと良いでしょう)!

ActionCable 経由のブロードキャスト

ActiveRecord コールバックから ActionCable を介してパーシャルをブロードキャストする場合:

 

request_id を指定する必要があります ローカル変数のデフォルトは nil 、これは Rails によって内部で使用されるためです。

 

そうしないと、コールバックがトリガーされたときにエラーが発生します。

これでホイッスルストップツアーは終了です!

留意すべき点

既存のパーシャルに厳密なローカルを追加するのは全か無かです。 指定されたファイルの提案。変数を見つけたときにマジック コメントに徐々に追加することはできません。上記の注意点で示されているように、マジック コメントで宣言する必要があるすべての変数を確認するのは難しい場合があります。

厳密なローカルを使用すると、コードについて推論するのがどれほど簡単になるかを考えると、新しいアプリで広範に使用する価値があると思います (そして、レガシー アプリに徐々に追加していきます)。

レガシー アプリのテスト スイートが、厳密なローカルを追加する部分を確実にカバーすることが重要です。省略すると例外が発生するため、変更をデプロイする前にすべてのユースケースをテストしたことを確認する必要があります。

私はマジックコメントの大ファンではありませんが、 (コメントには機能があってはならないと私は信じているので) アプローチでは、厳密なローカルは Rails への素晴らしい追加だと思います。ローカルをパーシャルに割り当てるのはいつも面倒でしたが、これにより簡単になります。注意点に注意してください!

まとめ

この投稿では、Rails 7.1 の厳密なローカルについて簡単に説明しました。厳密なローカル変数と注意点をいつ使用するかを検討する前に、部分変数とローカル変数がどのように機能するかを確認しました。

コーディングを楽しんでください!

追記Ruby Magic の投稿を報道後すぐに読みたい場合は、Ruby Magic ニュースレターを購読して、投稿を 1 つも見逃さないようにしてください。

Ruby on Rails 7.1:部分変数の厳密なローカル変数をマスターする

アユシュ ネワティア

ゲスト著者の Ayush は、フリーランスの Ruby および Rails 開発者です。彼は The Rails と Hotwire Codex の著者であり、Bridgetown コア チームの一員です。また、Scattergun というプライバシーを重視したメーリング リスト アプリも運営しています。

Ayush Newatia によるすべての記事


  1. Rubyでプレフィックスツリーを実装して使用する方法を学ぶ

    プレフィックスツリー(トライとも呼ばれます)は、単語リストを整理し、特定のプレフィックスで始まる単語をすばやく見つけるのに役立つデータ構造です。 たとえば、「cat」や「cape」など、「ca」で始まるすべての単語を辞書で見つけることができます。 この写真を見てください: これはプレフィックスツリーです。 ルートからフォローできます( * )マークされたノード( e など) およびt )単語を見つける。 この記事では、Rubyで独自のプレフィックスツリーを実装する方法と、それを使用して問題を解決する方法を学習します。 プレフィックスツリーの実装 これをRubyに実装するため

  2. Ruby on Rails でポリモーフィズムをマスターする:実践ガイド

    オブジェクト指向プログラム (OOP) の構築に時間を費やしたことがあるなら、おそらくアプリケーションでポリモーフィズムを使用したことがあるか、少なくともその用語を聞いたことがあるでしょう。 これは、科学やコンピューター サイエンスの教科書で目にするであろう種類の単語です。ポリモーフィズムの研究に時間を費やし、その概念を明確に理解せずにアプリケーションに実装したことがあるかもしれません。 この記事では、特に Ruby on Rails におけるポリモーフィズムについての理解を深めることができます。これを達成するために、以下について詳しく説明します。 現実世界でのポリモーフィズムの使用 O