conditional haml - if else nesting

Dr. Frankenstein picture Dr. Frankenstein · Nov 16, 2009 · Viewed 16.4k times · Source

What I want is both whats in "if" and whats in "else" to include #main-block.

- if @transparency
  #content-inner{:style => "background: url(../../../images/illustrations/" + @transparency + ") no-repeat 88% 50%"}
- else 
  #content-inner
     #main-block

What happens currently is, if @transparency is defined, #main-block is not nested inside #content-inner.

Answer

tadman picture tadman · Nov 16, 2009

You can use a ternary operator to conditionally apply the style attribute:

#content-inner{ :style => @transparency ? "background: url(../../../images/illustrations/" + @transparency + ") no-repeat 88% 50%" : '' }
  #main-block

For a more complicated arrangement, for example manipulating multiple hash attributes, it's best to either use a helper method, or to move the common content to a partial.