问题 Rails使用HAML刷新消息


我开始学习HAML:我无法将Flash块转换为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 %>

7939
2017-12-20 19:12


起源



答案:


干得好:

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

仅供参考,您可以通过在声明后将它们作为哈希附加到任何元素来添加属性。如果您没有指定元素,只是一个类或ID,HAML会使该元素成为具有给定类或ID的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

希望有所帮助。


16
2017-12-20 19:16



我建议在内容标记周围添加此检查,因为像Devise这样的库会在此结构中添加更多警报和通知。 -if key =='alert'或key =='notice' - gwnp
我知道这是非常古老的,但仍然有用,建议使用 - flash.each 代替 = flash.each否则HAML解释器会将flash哈希转储到您的HTML中。 - Midwire


答案:


干得好:

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

仅供参考,您可以通过在声明后将它们作为哈希附加到任何元素来添加属性。如果您没有指定元素,只是一个类或ID,HAML会使该元素成为具有给定类或ID的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

希望有所帮助。


16
2017-12-20 19:16



我建议在内容标记周围添加此检查,因为像Devise这样的库会在此结构中添加更多警报和通知。 -if key =='alert'或key =='notice' - gwnp
我知道这是非常古老的,但仍然有用,建议使用 - flash.each 代替 = flash.each否则HAML解释器会将flash哈希转储到您的HTML中。 - Midwire