ドキュメント通りにしてもhtmlが何も出力されないという問題
公式ドキュメントのこの部分によると、Nested Layoutを使いたい場合は下のようにすると書いてありますが、これだと動きません。htmlが何も出力されず白い画面となります。
1 2 3 4 5 |
<% wrap_layout :layout do %> <article> <%= yield %> </article> <% end %> |
これはMiddlemanが依存するPadrinoに変更があったためと言われています。
middleman/middleman#1269
バージョンは以下の通りです。
- middleman (3.4.0)
- padrino-helpers (0.12.5)
erbに”=”を加えてもダメ
上記のissue内で、slimでいうところの-
ではなく=
を使うようになったとあったので、1行目に=
を加えてみました。
1 2 3 4 5 |
<%= wrap_layout :layout do %> <article> <%= yield %> </article> <% end %> |
すると、下のようなエラーが発生します。
1 2 |
SyntaxError: /Users/hoge/blog/webfood/source/layouts/article.html.erb:1: syntax error, unexpected ')' @_out_buf << ( wrap_layout :layout do ).to_s; @_out_buf << ' |
エラーの全量ログはこちら。
スポンサーリンク
slimで”=”にすると動いた!
このissueのコメントによると、erbはまだ=
に対応できていないからとのことです。
slimやhamlは対応済みなので、slimで以下のようにすると動きました。
1 2 3 |
= wrap_layout :layout article = yield |
無理やりerbでも動かす方法
どうしてもerbが使いたい人は、きれいなコードとは言えませんが以下のようにすると動きます。
1 2 3 4 5 |
<%= wrap_layout :layout do "<article> #{yield} </article>" end %> |
まとめ
Middlemanは、Railsのhelperの使い勝手に似せるためかPadrinoというライブラリーに大きく依存しています。なので、Padrinoの仕様変更でわりと影響をうけそうです。
この件については、ドキュメントで説明しておけばよい話だと思うので、ドキュメントのほうにissueをたてました。
middleman/middleman-guides#535