2010-09-20 1 views
2

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

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

, который будет переводить на Еврорадио, как

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

есть способ для достижения этой цели в Haml кроме упаковки блока в состоянии?

+0

Вы можете сделать это в Ruby, но вы будете использовать, на мой взгляд , и, по мнению многих других, плохой стиль: см. [GitHub's Ruby style guide] (https://github.com/styleguide/ruby), в котором говорится, чтобы избежать цепочки. –

+0

Даже если бы я сказал «хорошо, стиль' do' ... 'end.if' читаем» (это не так), я съеживаюсь, чтобы увидеть это в Haml. Я приведу несколько альтернатив в ответах ниже. –

ответ

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

Haml действительно позволяет end в этом обстоятельстве.

+0

Уход! Я этого не знал. Upvoted! –

+0

Вы одновременно ответили на вопрос и сделали мои глаза кровоточащими. Пожалуйста, ради любви к Хамлу, не поощряйте это! :) –

0

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

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

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

(я упомянул GitHub Ruby Style guide выше в комментарии. Если вы search Google for 'ruby do end chaining' вы увидите много руководств по стилю, которые рекомендуют использовать эту конструкцию.)