2011-12-08 10 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を使用することです。

私が想像してるのRuby/HAMLソリューションは、このようなものになります。これの出力は最初のブロックと同じになり

def create_button(text) 
    %div.button text 
end 

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

を。

これを行う方法はありますか?そうでなければ、最終的にRubyヘルパーメソッドでマークアップを生成するためのエレガントな方法を探しています。これを行う方法についてご意見がありましたら、それを聞きたいと思います。私はRailsを初めて使い、ERBが本当に好きではありませんが、何かが欠けているかもしれません。とにかく、私は提案に開放されています。

+1

要素を作成するために、私自身の経由でのRailsコミュニティに新興代わりにヘルパーを使用してタグの場合 、使用 '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' 

複雑なヘルパーがたくさん必要になる場合は、代わりにpartialsを使用したり、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のを使用していないお勧め、と言いましたかプレゼンターパターンは(delegate_presenterまたはDraper複雑なHTMLウィジェット/ ITソリューションをお勧めしません

関連する問題