我有完美的工作ERB部分,它看起来像:
<% if error_tag.present? %>
<div class="form-group has-error">
<% else %>
<div class="form-group">
<% end %>
<div class="input-group">
<div class="input-group-addon"><i class="<%= picture_tag %>"></i></div>
<%= cycle_tag.text_field (fildname_tag), class: 'form-control', placeholder: placeholder_tag %>
</div> <!--input-group-->
<ul>
<% if error_tag.present? %>
<% error_tag.each do |msg| %>
<li>Field <%= msg %></li>
<% end %>
<% end %>
</ul>
</div> <!--form-group or form-group has-error-->
现在我试图在HAML中创建等效代码。在ERB的情况下,在第一个IF条件下,我只使用打开div标签操作。我做了HAML,它正在工作,但它看起来不像干。 这是:
- if error_tag.present?
.form-group.has-error
.input-group
.input-group-addon
%i{:class => picture_tag}
= cycle_tag.text_field fildname_tag, :class => 'form-control', :placeholder => placeholder_tag
%ul
- if error_tag.present?
- error_tag.each do |msg|
%li
Field
= msg
- else
.form-group
.input-group
.input-group-addon
%i{:class => picture_tag}
= cycle_tag.text_field fildname_tag, :class => 'form-control', :placeholder => placeholder_tag
你能帮助我做一个真正的DRY等同于我的ERB部分。谢谢!
答案 0 :(得分:1)
只有has-error
类是有条件的,所以将支票移到这样的属性中:
.form-group{:class => ('has-error' if error_tag.present?) }
.input-group
.input-group-addon
%i{:class => picture_tag}
= cycle_tag.text_field fildname_tag, :class => 'form-control', :placeholder => placeholder_tag
%ul
- if error_tag.present?
- error_tag.each do |msg|
%li Field #{msg}
如果没有错误,则('has-error' if error_tag.present?)
将评估为nil
,而Haml将仅使用form-group
作为课程。如果存在错误,Haml将组合两个字符串以生成类属性。