Ruby on rails Rails/Bootstrap/HAML-如何将此代码转换为显示flash消息到HAML?

Ruby on rails Rails/Bootstrap/HAML-如何将此代码转换为显示flash消息到HAML?,ruby-on-rails,twitter-bootstrap,haml,Ruby On Rails,Twitter Bootstrap,Haml,我想将以下代码转换为HAML,以便在Rails 4.2.2应用程序中处理引导程序的警报消息。我曾经尝试过手动操作,使用html2haml和在线转换器,但我得到的代码从来都不起作用 守则: <div class="alert <%= case type.to_sym when :alert, :danger, :error, :validation_errors 'alert-danger' when :warning, :todo

我想将以下代码转换为HAML,以便在Rails 4.2.2应用程序中处理引导程序的警报消息。我曾经尝试过手动操作,使用html2haml和在线转换器,但我得到的代码从来都不起作用

守则:

<div class="alert 
    <%= 
    case type.to_sym 
    when :alert, :danger, :error, :validation_errors
        'alert-danger'
    when :warning, :todo
        'alert-warning'
    when :notice, :success
        'alert-success'
    else 
    'alert-info'
    end
    %>
     alert-dismissible" role="alert">
    <button type="button" class="close" data-dismiss="alert"><span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button>
    <%= content %>
</div>

&时代;接近
这是我从转换器中得到的:

.alert.case.when.:validation_errors.when.:todo.when.:success.else.end.alert-dismissible{:class => "<haml_loud> type.to_sym :alert, :danger, :error, 'alert-danger' :warning, 'alert-warning' :notice, 'alert-success' 'alert-info' </haml_loud>", :role => "alert"}
  %button.close{"data-dismiss" => "alert", :type => "button"}
    %span{"aria-hidden" => "true"} ×
    %span.sr-only Close
  = content
.alert.case.when.:validation\u errors.when.:todo.when.:success.else.end.alert dismissible{:class=>“type.to\u sym:alert,:danger,:error,'alert-danger':警告,'alert-warning':注意,'alert-success''alert-info',:role=>“alert”}
%按钮。关闭{“数据解除”=>“警报”,:类型=>“按钮”}
%span{“aria hidden”=>“true”}
%span.sr-only关闭
=内容

我知道这很难看,但这是我发现的唯一一个可以在Bootstrap3.5.5中开箱即用的代码。如果有人对使用HAML的新代码有什么建议,我愿意听听。

如果您想将多行Ruby代码放在HTML元素的属性中,HAML并不是很好。无论如何,这被认为是一种不好的做法,因为它使您的视图变得复杂,所以我将使用助手来简化视图。例如,您可以创建一个
helpers/alert\u helper.rb
文件

helpers/alert\u helper.rb

module AlertHelper
  def build_alert_classes(alert_type)
    classes = 'alert alert-dismissable '
    case alert_type.to_sym 
    when :alert, :danger, :error, :validation_errors
        classes += 'alert-danger'
    when :warning, :todo
        classes += 'alert-warning'
    when :notice, :success
        classes += 'alert-success'
    else 
        classes += 'alert-info'
    end
  end
end
那么在你看来,它会变成这样:

查看

%div{ class: build_alert_classes(type), role: "alert" }
  %button.close{ type: "button", "data-dismiss" => "alert" }
    %span{ "aria-hidden" => true } &times;
    %span.sr-only Close
  = content

根据经验,如果你认为有逻辑,请将它们移到帮助者那里。非常感谢!从现在起,我将为用户提供帮助。这是我在网上找到的代码。我知道这很难看,但这是唯一有效的方法。现在这个新代码,加上一些editis,工作得非常好。