如果在if& else constrruction中仅使用open html标签,如何编写haml

时间:2014-09-15 12:14:55

标签: ruby-on-rails-4 haml erb

我有完美的工作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部分。谢谢!

1 个答案:

答案 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将组合两个字符串以生成类属性。