mark
mark

Reputation: 10564

Rails - conditional html attributes

Looking around the docs I cannot see a correct way to go about this. Here's an example using un-refactored code:

= link_to user.name, user, :meta => "#{user.public? ? '' : 'nofollow noindex'}"

Now this could be the same with any html attribute the result being I don't have valid xhmtl due to empty tag in the case of the condition not passing.

<a href='/users/mark' meta=''>Mark</a>

How can I make the attribute definition conditional, not just it's value.

Upvotes: 8

Views: 5603

Answers (3)

Peter Mghendi
Peter Mghendi

Reputation: 199

This is an old question, but I've been doing this like this (Example taken from Annie's answer):

<input type="checkbox" <% :checked if @post.tags.include?("Special Blog") %> />

Upvotes: 0

Annie
Annie

Reputation: 3190

This question is answered, but I would like to mention a special case in which drasbo's way wouldn't work.

If you want to make the presence of attribute conditional. Say checked attribute of input[type=checkbox]!

The presence of checked attribute makes the difference and sadly browsers tend to ignore its value.

Unfortunately, its not available with HAML syntax. To do that, you need to fallback to standard HTML tag:

%form
  <input type="checkbox" "#{@post.tags.include?("Special Blog")? "checked" : ""}" />
  %button
    Click Me

Upvotes: 5

dtrasbo
dtrasbo

Reputation: 436

Use nil instead of an empty string:

= link_to user.name, user, :meta => user.public? ? nil : 'nofollow noindex'

Upvotes: 20

Related Questions