2010-08-10 17 views
132

Si post.published?clase Añadir si la condición es verdadera en Haml

.post 
/Post stuff 

De lo contrario

.post.gray 
/Post stuff 

He implementado esto con rieles ayudante y parece feo.

= content_tag :div, :class => "post" + (" gray" unless post.published?).to_s do 
/Post stuff 

Segunda variante:

= content_tag :div, :class => "post" + (post.published? ? "" : " gray") do 
/Post stuff 

¿Hay una manera más simple y haml específico?

UPD. Haml-específico, pero aún no es simple:

%div{:class => "post" + (" gray" unless post.published?).to_s} 
/Post stuff 

Respuesta

287
.post{:class => ("gray" unless post.published?)} 
+61

solo una nota lateral para múltiples condiciones '{clase: [('clase1' a menos que condition1), ('class2' si condition2)]} '.. etc –

+0

Succintct y excelente, ¡gracias! –

+4

Más breve para varias condiciones: '{class: [(: class1 if cond1), (: class2 if cond2)]}' – Phrogz

13

Realmente lo mejor es ponerlo en un ayudante.

%div{ :class => published_class(post) } 

#some_helper.rb 

def published_class(post) 
    "post #{post.published? ? '' : 'gray'}" 
end 
+0

He puesto esto en mi archivo de ayuda, pero mi aplicación me dice que no hay una variable de "publicación". –

+1

Vaya, disculpa. He editado la respuesta. – mark

+2

fyi: si solo desea incluir una clase en un caso determinado y nada en otros casos, puede simplemente establecer 'nil' y no se establecerá el atributo, en lugar de establecer' class = "" ' – MMachinegun

21
- classes = ["post", ("gray" unless post.published?)] 
= content_tag :div, class: classes do 
    /Post stuff 

def post_tag post, &block 
    classes = ["post", ("gray" unless post.published?)] 
    content_tag :div, class: classes, &block 
end 

= post_tag post 
    /Post stuff 
+1

No tan conciso, pero se ve mejor que otras formas si se pone en un ayudante. –

+3

Esto funciona bien. Sin embargo, noté que no necesita el '.compact.join (" ")'. Simplemente puede hacer ': clase => [" post activo ", (" gris "a menos que sea post.published?)]' – Stenerson

9

HAML tiene una bonita construida en forma de manejar esto:

.post{class: [!post.published? && "gray"] } 

La forma en que esto funciona es que el condicional consigue evaluados y si cierto, la cadena se incluye en las clases, si no, no se incluirá.

Cuestiones relacionadas