Ruby/Haml: Conditionally/Optionally setting an attribute/class
One of the things that we want to do reasonably frequently is set an attribute (most often a class) on a HTML element depending on the value of a variable.
I always forget how to do this in Haml so I thought I better write it down so I’ll remember next time!
Let’s say we want to add a success class to a paragraph if the variable correct is true and not have any value if it’s false.
The following code does what we want:
- correct = true
%p{:class => (correct ? "success" : nil) }
important text
This generates the following HTML if correct is true:
<p class="success">
important text
</p>
And the following HTML if it’s false
<p>
important text
</p>
To summarise, if we set an attribute to nil in Haml it just won’t be rendered at all which is exactly what we want in this situation.
About the author
I'm currently working on short form content at ClickHouse. I publish short 5 minute videos showing how to solve data problems on YouTube @LearnDataWithMark. I previously worked on graph analytics at Neo4j, where I also co-authored the O'Reilly Graph Algorithms Book with Amy Hodler.