RailsのStrict Localsをslimで使う

Rails7.1以降、部分テンプレートのlocals引数をチェックしてくれるマジックコメントが追加されています。
viewのリファクタ時についうっかり、localsを設定し忘れたりして事故った記憶があるので、この機能は嬉しいです。

こちらの機能をslimで使うにあたり、10分ほどハマったのでメモしておきます。

概要

デフォルト値の設定

PRの内容を抜粋すると、title変数のデフォルト値を設定するために以下のようなコードを書いていた場合、

# before
<%# issues/_card.html.erb %>
<% title = local_assigns[:title] || "Default title" %>
<% comment_count = local_assigns[:comment_count] || 0 %>
<h2><%= title %></h2>
<span class="comment-count"><%= comment_count %></span>

こちらのマジックコメントを書けばよくなっています。

# after
<%# issues/_card.html.erb %>
<%# locals: (title: "Default title", comment_count: 0) %>
<h2><%= title %></h2>
<span class="comment-count"><%= comment_count %></span>

localsのチェック

デフォルト値の設定がない場合は、value無しで記載すれば良いです。localsをつけ忘れた場合は、ActionView::Template::Error が発生するようになっています。

<%# locals: (message:) -%>
<%= message %>

localsが不要な場合

また、明示的に、localsが不要である場合は、以下のように書くことが可能です。この場合もエラーが発生します。

<%# locals: () %>

slimで使うために

slimで使ってみようと以下のように記載したのですが、、、

/ locals: (book:)

これではダメで、以下のように書く必要がありました。

/# locals: (book:)

参考