ERB vs HAML conversion of an if condition?

sleepycat picture sleepycat · Jul 28, 2009 · Viewed 14.2k times · Source

I am getting started with HAML and am working on my converting my first file. The ostensibly correct omission of the "- end":

- if current_user
= link_to 'Edit Profile', edit_user_path(current_user.id)
= link_to 'Logout', logout_path
- else
= link_to 'Register', new_user_path
= link_to 'Login', login_path

gets me:

app/views/layouts/application.html.haml:28: syntax error, unexpected kENSURE, expecting kEND
app/views/layouts/application.html.haml:30: syntax error, unexpected $end, expecting kEND

While the logical

- if current_user
= link_to 'Edit Profile', edit_user_path(current_user.id)
= link_to 'Logout', logout_path
- else
= link_to 'Register', new_user_path
= link_to 'Login', login_path
- end

gets me:

You don't need to use "- end" in Haml. Use indentation instead:
- if foo?
  %strong Foo!
- else
  Not foo.

How do I get this conditional statement working in HAML?

Answer

Mike Trpcic picture Mike Trpcic · Jul 28, 2009

HAML is indentation based, and the parser can be tricky. Replace

- if current_user
= link_to 'Edit Profile', edit_user_path(current_user.id)
= link_to 'Logout', logout_path
- else
= link_to 'Register', new_user_path
= link_to 'Login', login_path

with

- if current_user
  = link_to 'Edit Profile', edit_user_path(current_user.id)
  = link_to 'Logout', logout_path
- else
  = link_to 'Register', new_user_path
  = link_to 'Login', login_path

and give it a try. Notice how the indentation changed on the link_to lines.