Edited at

Haml記法でunexpected keyword_ensure, expecting end-of-inputのsyntax errorが出た時

More than 3 years have passed since last update.


現象


Rails4

haml記法でコードを書いていたときに、下記のような文法エラーが

syntax error, unexpected keyword_ensure, expecting end-of-input

エラーが起きているファイルは、index.html.hamlとのこと。

このsyntax errorは、erbで書いているときは、よく見かけますよね。

だいたい、<% end %>とかが抜けてますよね。

でも、haml記法だと、endとか閉じタグはいらないはずですね。


原因

実は、hamlで上記のようなendの過不足を訴えるエラーが出た時には、

endがないのではなく、doが抜けているときに起きるようなのですね。

例えば、以下のように書くと上記のエラーが出ます!

= link_to photo_path(photo.id)

  = image_tag("#{photo.first.image}")

ですので、

= link_to photo_path(photo.id) do

  = image_tag("#{photo.first.image}")

こう修正します。

その他、form_tag, form_for内のf.text_fieldなどの中に入れ子でコードを書くときには、doを書かないとエラーが出ますね。

form_forとかのdoが抜けてるのはすぐ気付けそうでも、f.text_fieldのdoを抜かしてエラーを出してもなかなか気づかなそうですよね。

閉じタグを気にしなくていいのがhamlの魅力ですが、endはなくて大丈夫でも、doは書き忘れないようにしないといけないんですね。


参考

http://stackoverflow.com/questions/31679325/haml-error-unexpected-keyword-ensure-expecting-end-of-input