部分テンプレートとは
・RailsではViewをerbファイル(EmbeddedRuby: 埋め込みRuby)で記述できる。
・erbファイルでは共通のパーツを部分テンプレートとして切り出せる。
部分テンプレートの使い方
作成の仕方
app/views/my_partials/_my_partial_hoge.html.erb
<p>hogeの部分テンプレートです</p>
呼び出し方
app/views/sample.html.erb
<%= render partial: 'my_partials/my_partial_hoge' %>
※ パスはviews配下から
※ partial:オプションは、省略可能。
本題: 部分テンプレートのlocalsオプションについて
部分テンプレートではlocalsオプションで、部分テンプレートに変数を渡すことができる。
app/views/my_partials/_my_partial_hoge.html.erb
<p><%= title %>の部分テンプレートです</p>
app/views/sample.html.erb
<%= render partial: 'my_partials/my_partial_hoge', locals: { title: 'hoge' }%>
しかし、他で呼ぶ時にlcoalsオプションを使用しない場合、
部分テンプレート側でローカル変数は定義されないため、エラーとなる(NameError)
とりあえずdefined?で分岐させておくとNameErrorは回避される
app/views/my_partials/_my_partial_hoge.html.erb
<p><%= title if defined?(title) %>の部分テンプレートです</p>
開発者側のルールとすればそれでもいいのだが、
ローカル変数は、必須なもの任意なものを教えてほしい
(というかコンパイルしてエラー出してほしい)
rails7.1以降で部分テンプレートのローカル変数を明示的にできるマジックコメントがある
ひとまずこれでいい。
https://blog.kiprosh.com/allow-template-to-set-strict-locals/