I occasionally have to add a class to an html element based on a condition. The problem is I can’t figure out a clean way of doing it. Here’s an example of the stuff I’ve tried:
<div <%= if @status = 'success'; "class='ok'"; end %>>
some message here
</div>
OR
<% if @status == 'success' %>
<div class='success'>
<% else %>
<div>
<% end %>
some message here
</div>
I don’t like the first approach because it’s crowded looking and hard to read. I don’t like the second approach because the nesting is screwed up. It’d be nice to put it in the model, (something like @status.css_class), but that doesn’t belong there. What do most people do?
I use the first way, but with a slightly more succinct syntax:
Though usually you should represent success with boolean
trueor a numeric record ID, and failure with booleanfalseornil. This way you can just test your variable:A second form using the ternary
?:operator is useful if you want to choose between two classes:Finally, you can use Rail’s record tag helpers such as
div_for, which will automagically set your ID and class based on the record you give it. Given aPersonwith id 47: