Haml:如何生成动态id

zrl*_*3dx 4 haml ruby-on-rails string-interpolation

我在erb中有以下代码可以正常工作:

<div id='flash_<%= flash.keys.first.to_s %>'>
    <%=h    flash[flash.keys.first] %>
</div>
Run Code Online (Sandbox Code Playgroud)

我想把它转换为haml:

#flash_#{flash.keys.first.to_s}
  =h flash[flash.keys.first]
Run Code Online (Sandbox Code Playgroud)

但我收到错误:

Illegal element: classes and ids must have values.
Run Code Online (Sandbox Code Playgroud)

这是奇怪的,因为有IS值,'flash_'部分始终存在,即使我这样做,我也会得到错误:

#flash_#{nil.object_id}
Run Code Online (Sandbox Code Playgroud)

显然我的Ruby插值在haml中有些不对劲,但我无法做到.根据文档http://haml.info/docs/yardoc/file.REFERENCE.html#ruby_interpolation_# {}用于内插Ruby,它适用于这种情况:

#flash_
  #{flash.keys.first.to_s}
Run Code Online (Sandbox Code Playgroud)

但这不是我想要的.

总之,我想得到以下输出:

<div id="flash_foo"> blahblah </div>
Run Code Online (Sandbox Code Playgroud)

但它也可以:

<div id="flash_"></div>
Run Code Online (Sandbox Code Playgroud)

如何用haml获得?

Reu*_*aby 11

%div{ :id => "flash_#{flash.keys.first}" }    
  =h flash[flash.keys.first]
Run Code Online (Sandbox Code Playgroud)