2011-12-08 74 views
3

我想使用Ruby方法生成在我的頁面中頻繁出現的標記。從本質上講,我想這樣做(ERB文件)相當於:混合Ruby和HAML

<% def create_button(text) %> 
    <div class="button"><%= text %></div> 
<% end %> 
... 
<% 
    create_button("My First Button") 
    create_button("My Second Button") 
    # etc. 
%> 

顯然這個想法是,任何時候,我需要一個按鈕,我用create_button

紅寶石/ HAML解決我想象會是這個樣子:

def create_button(text) 
    %div.button text 
end 

create_button("My First Button") 
create_button("My Second Button") 

這樣做的輸出將是相同的第二塊。

有沒有辦法做到這一點?如果沒有,最終我正在尋找一種使用Ruby helper方法生成標記的優雅方法。如果您對如何做到這一點有任何建議,我想聽聽。我是Rails的新手,不太喜歡ERB,但也許我錯過了一些東西。無論如何,我願意接受建議。

+1

不建議解決方案元素使用的幫手,而不是 對於標籤,使用'content_tag(:。標籤,「內容」 )'方法 –

回答

5

你不應該在Rails的視圖文件中定義一個方法。無論語言是ERb,Haml還是其他語言,都是如此。相反,把該方法的輔助文件,然後只是把它在你的觀點:

應用程序/傭工/ some_helper.rb

module SomeHelper 
    def button(text) 
    content_tag :div, text, :class => :button 
    end 
end 

應用程序/視圖/不管/ view.html.haml

= button 'My First Button' 
= button 'My Second Button' 

如果您需要大量複雜的助手,請改用偏分量和/或調查Cells gem。

1

你想做什麼是可能的。這裏也有一些documentation from the HAML page,這是我的猜測如何使用它在你的situtation:

def my_thing 
    haml_engine = Haml::Engine.new(".div_class 
    this is my attempt at HAML") 
    haml_engine.render 
end 

話雖如此,我建議你不要做這樣的事情,而是使用Rails的(內置)傭工或演示模式(通過我自己出現在Rails社區delegate_presenterDraper創建複雜的HTML控件/