Rails флеш-сообщения с HAML

Я начал изучать HAML: и я не могу перевести флеш-блок в HAML:

<% flash.each do |key, value| %>
  <div class="alert alert-<%= key %>">
    <button type="button" class="close" data-dismiss="alert">×</button>
    <strong><%= value %></strong>
  </div>        
<% end %>

Ответ 1

Здесь вы идете:

= flash.each do |key, value|
  .alert{ :class => "alert-#{key}" }
    %button.close{ :data => { :dismiss => "alert" } } x
    %strong
      = value

Просто FYI вы можете добавлять атрибуты к любому элементу, прикрепляя их как хэш после объявления. Если вы не укажете элемент, просто класс или идентификатор, HAML делает этот элемент div с данным классом или идентификатором. Но вы могли бы сделать это по-разному. Например, все они одинаковы:

%div{:class => 'foo bar', :id => 'test' }
.foo{:class => 'bar', :id => 'test'}
#test.bar{:class => 'foo'}
#test.foo.bar

Весь вывод: <div class="foo bar" id="test"></div>

Вам нужно поместить вычисленные атрибуты в хэш, т.е.:

- klass = "bar"
%div{ :class => klass }

Выходы: <div class="bar"></div>

Также обратите внимание, что во всех приведенных выше примерах :attribute => 'value' можно выразить как attribute: 'value', например:

%button.close{ data: { dismiss: 'alert' } } x

Надеюсь, что это поможет.