2015-06-27 47 views
2

我想將下面的代碼轉換爲HAML來處理Rails 4.2.2應用程序中的Bootstrap警報消息。我試過手動,使用html2haml和在線轉換器和我從來沒有工作的代碼。Rails/Bootstrap/HAML - 如何將此代碼轉換爲向HAML顯示Flash消息?

代碼:

<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 

我知道這是醜陋的,但它是唯一的代碼,我發現與引導工作開箱3.5.5。如果有人對使用HAML的新代碼有任何建議,我很樂意聽到。

回答

5

如果您想要將多行Ruby代碼放入HTML元素的屬性中,HAML並不是真的很棒。無論如何,這被認爲是一種不好的做法,因爲它使你的視圖變得複雜,所以我會用一個助手來簡化視圖。例如,您可以創建一個helpers/alert_helper.rb文件。

傭工/ alert_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 
+2

規則,如果你在有邏輯你的觀點,把他們轉移到幫手。 – forthowin

+0

非常感謝!我會從這裏開始使用幫手。這個代碼我在網上找到。我知道這很醜陋,但它是唯一能夠工作的人。 現在,這個帶有幾個editis的新代碼正在完美工作。 –