Jeśli post.published?
.post
/ Post stuff
Inaczej
.post.gray
/ Post stuff
Zaimplementowałem to z pomocnikiem rails i wydaje się brzydkie.
= content_tag :div, :class => "post" + (" gray" unless post.published?).to_s do
/ Post stuff
Drugi wariant:
= content_tag :div, :class => "post" + (post.published? ? "" : " gray") do
/ Post stuff
Czy jest bardziej prosty i specyficzny dla Hamla sposób?
UPD. Specyficzne dla Hamla, ale nadal nie jest proste:
%div{:class => "post" + (" gray" unless post.published?).to_s}
/ Post stuff
{ class:[ (:class1 if cond1), (:class2 if cond2) ] }
źródło
.compact.join(" ")
. Możesz po prostu to zrobić:class => ["post active", ("gray" unless post.published?)]
Naprawdę najlepszą rzeczą jest umieszczenie go w pomocniku.
źródło
nil
a atrybut nie zostanie ustawiony, zamiast ustawianiaclass=""
HAML ma ładny sposób radzenia sobie z tym:
Sposób, w jaki to działa, polega na tym, że warunek jest oceniany, a jeśli jest prawdziwy, ciąg zostanie uwzględniony w klasach, jeśli nie, nie zostanie uwzględniony.
źródło
Zaktualizowana składnia Rubiego:
źródło