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:)