условные блоки в haml

в рубине вы можете сделать условный блок вот так

block do |n|
  puts n
end if foo == bar

что переводится в erb как

<% block do |n| %>
  <%= n %>
<% end if foo == bar %>

есть ли способ добиться этого в haml, кроме как обернуть блок в условие?


person Community    schedule 20.09.2010    source источник
comment
Вы могли бы сделать это в Ruby, но вы использовали бы, по моему мнению и по мнению многих других, плохой стиль: см. Руководство по стилю Ruby на GitHub, в котором говорится, что следует избегать концевой цепочки.   -  person David J.    schedule 17.06.2012
comment
Даже если бы я сказал, что стиль do ... end.if читабелен (это не так), я съеживаюсь, увидев, что это сделано в Haml. Я дам несколько альтернатив в ответах ниже.   -  person David J.    schedule 17.06.2012


Ответы (2)


- block do |n|
  = n
- end if foo == bar

Haml допускает end в этом случае.

person Natalie Weizenbaum    schedule 20.09.2010
comment
Вы одновременно ответили на вопрос и заставили мои глаза кровоточить. Пожалуйста, ради любви к Haml, не поощряйте это! :) - person David J.; 17.06.2012

Пожалуйста, поместите if впереди - это делает его более читаемым:

- if foo == bar
  - block do |n|
    = n

И, если это происходит часто, рассмотрите возможность написания собственного помощника Haml.

(Я упомянул руководство по стилю GitHub Ruby выше в комментарии. Если вы поищите в Google «ruby do end chaining», вы увидите множество руководств по стилю, в которых рекомендуется использовать эту конструкцию. .)

person David J.    schedule 16.06.2012