Как отобразить логические атрибуты данных с помощью Haml?


UPDATE: Haml, действительно, уже делает это автоматически! Однако у меня был хэш внутри помощника link_to, а не тег Haml, и я его даже не заметил. Глупый я! Так что вопрос в значительной степени недействителен.

Haml делает рендеринг булевых атрибутов HTML очень простым:

%input{checked: @boolean}

Отображает простой <input>, если @boolean является ложным, или <input checked> в противном случае.

Haml также позволяет легко отображать атрибуты данных:

%a{data: { is_special: false } }

Рендеры: <a data-is-special="false">.

Есть ли какой-нибудь способ спросить Haml интерпретировать этот пользовательский атрибут data-is-special как логический? Я хотел бы не , чтобы он присутствовал, если назначается ложное значение, и чтобы он присутствовал, если назначается что-либо истинное.

1 2

1 ответ:

Код в скобках-это обычный код ruby, поэтому если бы вы могли выполнить эту задачу в ruby, у вас было бы решение. Я придумал что-то вроде этого:

def remove_false(hsh)
  Hash[hsh.each_pair.select {|key, value| value}]
end

{data: remove_false(is_special: false)} #=> {:data => {}}

Это решение плохо работает, если у вас есть комбинированные ключи, которые вы хотите обработать специально и нормально в одном хэше.