【Ruby on Rails】パーシャルファイルの使い方
はじめに
2024/1からプログラミングスクールに通っている、プログラミング初学者です。
2024/6/28より自分自身のアウトプットのために、記事を毎日投稿をしています。
初学者の投稿になるため間違い等ございましたら、優しくご指摘いただけますと幸いです。
Railsにおける、パーシャルファイルの使い方 / ファイルの配置の仕方
パーシャルファイルをどのファイル配下に配置すべきか、に関して理解が浅かったので記事を書こうと思います。
viewファイルの可読性を上げるために、パーシャルファイルに切り分けて書くということは理解していましたが、これまでアプリ制作をしてた際、全てのパーシャルファイルをview/shared配下に配置していました。
しかし学習を進める中で、すべてのパーシャルファイルをshared配下に置くのは間違っているのではないか?と感じたため、改めてRailsガイドを確認しました。
<%= render "application/ad_banner" %>
<h1>Products</h1>
<p>私たちの素晴らしい製品のいくつかをご紹介します:</p>
<% @products.each do |product| %>
<%= render partial: "product", locals: { product: product } %>
<% end %>
<%= render "application/footer" %>
上のコードの_ad_banner.html.erbパーシャルと_footer.html.erbパーシャルに含まれるコンテンツは、アプリケーションの多くのページと共有できます。あるページを開発中、パーシャルの部分については詳細を気にせずに済みます
上記、_ad_banner.html.erbと_footer.html.erbがパーシャルファイルとして切り分けられています。
どちらのパーシャルファイルも、viewファイル以外でレンダリングされるファイルであることから、application配下に存在しているということが読み取れました。
さらにRailsガイドを読み進めていくと、特定のviewファイルでしか使用しないファイルは、そのファイル直下にパーシャルファイルとして配置していました。
(Railsガイド内では、partial: "products/product" と記載あり)
単に可読性を上げるためにパーシャルファイルとして切り分けるのではなく、その切り分けたパーシャルファイルがどのviewファイルでレンダリングされるかを理解した上で、パーシャルファイルを配置すべき、ということを改めて学びました。
partialとlacalsオプションのないrender
特定のviewファイルでパーシャルファイルをレンダリングする際に、
<%= render "product", product: @product %>
と書くことが多いと思います。プログラミングを開始して2、3ヶ月目の頃はproduct: @productがどういう意味なのか理解できていませんでした。
改めてRailsガイドを読む中で、上記は
<%= render partial: "product", locals: { product: @product } %>
を省略した形であることを再認識しました。
<%= render partial: "product", locals: { product: @product } %>の読み方
- localsオプションで渡された{ product: @product} のキーは、コントローラーで定義されたインスタンス変数を、パーシャルファイル内ではローカル変数として使用できるように、このようの記載している。
<%= render "product", product: @product %>の読み方
- 上記書き方のpartialとlocalsオプションを省略した書き方。
renderはpartialとlocalsの2つのオプションをとっていますが、他に渡したいオプションがなければ、partialとlocalsを明示する必要がないので、この省略した形になる。
最後に
記事を書いてみて、今までよりパーシャルファイル、ローカル変数 / インスタンス変数への理解が深まりました。ありがとうございました。
Discussion