2011-01-15 16 views
139

Ich habe eine Schleife wie solche:Eine Variable in eine partielle, Schienen 3?

<% @posts.each do |post| %> 
    <% render middle %> 
<% end %> 

Da ist in meinem mittleren Teil, wie kann ich den aktuellen Beitrag zugreifen?

+0

Hallo Elliot ich dies auf Standard rüstet bin mit. Verwenden Sie in index.html.erb, um _show.html.erb darzustellen, wobei show partially modal enthält. Alles funktioniert gut, außer dass ich beim Drücken von show link die gleiche ID anstelle der IDs anzeige. – learner

Antwort

235

Try this:

<% @posts.each do |post| %> 
    <%= render 'middle', :post => post %> 
<% end %> 

Like this Sie eine lokale Variable post innerhalb des Teils zur Verfügung haben.

+18

Sie brauchen <%= %> nicht <% %> Tags oder sonst wird es nicht – Ryan

+0

Dank, du hast natürlich recht. Korrigiert. – polarblau

+4

Denken Sie daran, Sie müssten '<% = render 'Mittel',: Post => Post%>' für Schienen 3.1.x – Archonic

10

Ersetzen Sie <%= render middle %> durch <%= render middle, :post => post %>. Dann können Sie in Ihrer middle teilweise auf die Variable post zugreifen.

14
<% @posts.each do |post| %> 
    <% render middle, :post => post %> 
<% end %> 

können Sie nun Posten als lokale Variable zugreifen post im Teil

124

Geben Sie es auf die teilweise als lokale Variable

<%= render :partial => 'middle', :locals => { :post => post } %> 

Natürlich Schienen hat auch eine Abkürzung für das Rendern Sammlungen:

<%= render :partial => 'post', :collection => @posts %> 

In diesem Fall wird es den Par anrufen TiAl Beitrag für jeden Beitrag mit einer lokalen Variablen ‚post‘

Sie können sogar eine Spacer-Vorlage zwischen jedem Beitrag leisten:

<%= render :partial => 'post', :collection => @posts, :spacer_template => 'post_divider' %> 
+14

Wusste nicht über die: spacer_template Option, wirklich nett. Vielen Dank! –

+11

Beachten Sie, dass der Hash-Parameter "localhosts" bei der Verwendung von Rails 3 nicht benötigt wird. Der Argument-Hash wird in Argumente konvertiert, die an das partielle Argument übergeben werden. – superluminary

+4

Ich brauchte noch: Locals Hash für es zu arbeiten .. Ich bin am Laufen 3.2.12 – mck

Verwandte Themen