2011-01-15 3 views
0

私はこのような構造をレンダリングしたいと思います:パーツを使ってRailsでラッパーとしてレンダリングすることはできますか?

<tag1> 
    <tag2 someattribute="somevalue"> 
    <.. lot of things inside ..> 
    </tag2> 
</tag1> 

<tag1> 
    <tag2 someattribute="someothervalue"> 
    <.. different inside things inside ..> 
    </tag2> 
</tag1> 

TAG1、TAG2が同じで、彼らは単にパラメータ化されています。コードの内側が変化します。私はそのような上記のこと(HAML)を実装してみました:

%div{id:['products', id]} 
    .products_content 
    %div{id:['products', id, 'content'], class:'products_mask'} 
     = yield 

これは、テンプレートから呼び出される部分_content_head.html.haml、だった:内部で生じる私の理論

= render 'shared/content_head', id: 'all' do 
    %h3= Title 
    %p= Body of the text. 

部分的に渡されたブロックのレンダリングにつながるとは証明されませんでした。コードラッパーとしてパーシャルを使用する方法はありますか?あなたはこれに到達する方法を私にいくつかの解決策を提案することはできますか?ありがとうございました。

答えて

2

この方法は、captureメソッドを使用すると効果的です。

私はERBでのみお馴染みだが、ここでは一般的な考え方です:

<% structure = capture do %> 
    <h3>Title</h3> 
    <p>Body of text</p> 
<% end %>

そして、部分的に変数を渡す:

<%= render 'shared/content_head', :structure => structure %>

と部分の中に、structureを吐き出します変数:

<%= structure %>

リセットstructure複数回あなたはパーシャルをレンダリングするとき(または、より適切には、ヘルパーで?)

+0

最初にキャプチャしてから部分的に呼び出すのではなく、キャプチャインラインを使用できることがわかりました。もう少し読みやすいです。例えば、必要に応じてより多くのerbを含む、あなたの部分の内部コンテンツをキャプチャ{%> myvar = <%= myvar %> ... <% } %> ' – Yetanotherjosh

0

私は(Railsの4を、私はそれがあまりにもRailsの3で動作するはずだと思う)以下を使用しました:

<%# app/views/users/_edit.html.erb %> 
<%= render layout: 'modal_wrapping' do |f| %> 
    <%= f.input :email %> 
    ... 
<% end %> 

関連する問題