[Haml] syntax error, unexpected keyword_ensure, expecting keyword_end というエラーの解決方法

Tadashi Shigeoka ·  Fri, April 13, 2012

Ruby on Rails で Haml を使っていて以下のようなエラーが発生しました。

■ エラーメッセージ

syntax error, unexpected keyword_ensure, expecting keyword_end

原因は、if 文の分岐の中をインデントを下げずに、下記のように記載していたせいでした。

%ul.nav を同じインデントで揃えたくて、こう書いたのですが、これがダメでした。

%div.container.nav-collapse
  %ul.nav
    %li #{ link_to "Article", "/articles" }
  - if user_signed_in?
  %ul.nav
    %li #{ link_to "Signed in as #{ current_user.email }", "#" }
  %ul.nav
    %li #{ link_to "Sign out", destroy_user_session_path, :method => :delete }
  - else
  %ul.nav
    %li #{ link_to "Sign up", new_user_registration_path }
  %ul.nav
    %li #{ link_to "Sign in", new_user_session_path }

正しくは、下記のように書きます。

%div.container.nav-collapse
  %ul.nav
    %li #{ link_to "Article", "/articles" }
  - if user_signed_in?
    %ul.nav
      %li #{ link_to "Signed in as #{ current_user.email }", "#" }
    %ul.nav
      %li #{ link_to "Sign out", destroy_user_session_path, :method => :delete }
  - else
    %ul.nav
      %li #{ link_to "Sign up", new_user_registration_path }
    %ul.nav
      %li #{ link_to "Sign in", new_user_session_path }

途中から、%ul.nav のインデントが1つ下がってて気持ち悪いですが、出力されるHTMLでは綺麗に同じインデントの階層で並んでいるので、安心しました。

以上です。