0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Rails】部分テンプレートのlocalsオプションについて

Last updated at Posted at 2023-12-08

部分テンプレートとは

・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/

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?