haml says yes, rails says no

I'm using the haml gem and it's great, been using it for a while and I love it.

I've got a problem trying to display the flash messages, if I do the following:

     - if flash[:notice]        #flashNotice          =flash[:notice]      - else if flash[:error]        #flashError          =flash[:error]      - end

I get

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

Ok, so I take out "- end" and I get

default.haml:21: syntax error, unexpected $end, expecting kEND

So which is it? What do I have to do to get around this? My indentation is perfect, so I don't see what else I can do. Incidentally this appears to be a new problem with the latest version of haml. Before I was using "- end" and it worked perfectly.

Any help appreciated.

Thanks

Matt

I realize this isn't a direct answer to your question but to give you some context I have been using haml since it was first released and I have used in on many many projects. I absolutely cannot go back to rhtml because haml is so much more concise. Still though, I have no idea the answer to your question. Why? Because I had always heard that conditional logic should not be in my views. I realize this is a personal opinion but I figure I would show you how I would handle this:

# application_helper.rb # even if flash error doesn't exist this will return nil (empty as expected) def place_flash_message   flash[:notice] ? flash[:notice] : flash[:error] end

# view.html.haml = place_flash_message

or if I really need conditional logic such as in:

if logged_in?   something else   other thing

I would simply create a helper or a helper block with capture.

Anyways, in my opinion this improves readability and as a general rule of thumb in 2 years of rails development projects I have never felt the need to stick conditional logic directly in my view.

Now assuming you discard all that, I think the correct method is not to put the end in haml which would make more sense in the haml way of doing things. Since I haven't actually needed to do this, I am not sure the issue. Good luck

Matt Harrison wrote:

     - if flash[:notice]        #flashNotice          =flash[:notice]      - else if flash[:error]        #flashError          =flash[:error]      - end

What about

- if flash[:notice]   #flashNotice     = flash[:notice] - elsif flash[:error]   # flashError     = flash[:error]

Your "else if" may be constructing an inner "if" whose indentation doesn't resolve properly

Ar Chron wrote:

Matt Harrison wrote:

     - if flash[:notice]        #flashNotice          =flash[:notice]      - else if flash[:error]        #flashError          =flash[:error]      - end

What about

- if flash[:notice]   #flashNotice     = flash[:notice] - elsif flash[:error]   # flashError     = flash[:error]

Your "else if" may be constructing an inner "if" whose indentation doesn't resolve properly

Yes elsif solves it, I must've been using too many other languages recently :smiley:

Thanks

Matt