Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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.

like image 665
mark Avatar asked Dec 23 '10 10:12

mark


2 Answers

Use nil instead of an empty string:

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

like image 108
dtrasbo Avatar answered Oct 15 '22 06:10

dtrasbo


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
like image 37
Annie Avatar answered Oct 15 '22 07:10

Annie