2011-01-15 8 views
0

Ich möchte Strukturen so machen:Ist es möglich, Partials zu verwenden, die in Rails als Wrapper gerendert werden?

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

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

Die tag1, tag2 gleich sind, sind sie nur parametrisiert. Der innere Teil des Codes ändert sich. Ich habe versucht, das Ding oben so (haml) zu implementieren:

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

Dies war die partielle _content_head.html.haml, die aus einer Vorlage aufgerufen wird:

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

Meine Theorie, dass Ausbeute innerhalb der teilweise würde das Rendering des bestandenen Blocks nicht beweisen. Gibt es eine Möglichkeit, Partials als Code-Wrapper zu verwenden? Können Sie mir eine Lösung vorschlagen, wie Sie das erreichen können? Vielen Dank.

Antwort

2

Dies könnte eine gute Verwendung der capture Methode sein.

ich mit ERB nur vertraut bin, aber hier ist die allgemeine Idee:

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

dann wird die Variable in den Teil passieren:

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

Und innerhalb des Teils, ausspucken der structure Variable:

<%= structure %>

Reset structure mehrmals innerhalb die Ansicht beim Rendern von Teiltönen (oder vielleicht passender, in einem Helfer?).

+0

Ich habe festgestellt, dass Sie capture inline verwenden können, im Gegensatz zu Capturing zuerst und dann das partielle aufrufen. Es ist ein wenig lesbarer. Beispiel: '<% = rend 'mypartial',: structure => erfasse {%> den inneren Inhalt deines Partials hier, einschließlich mehr bei Bedarf, myvar = <%= myvar %> ... <% } %>' – Yetanotherjosh

0

Ich habe den folgenden (Rails 4, aber ich denke, es sollte 3 auch mit Rails arbeiten) verwendet:

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

.