Übergeben Sie eine Variable in einen Teil, Schienen 3?


140

Ich habe eine Schleife wie diese:

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

Wie greife ich dann in meinem mittleren Teil auf den aktuellen Beitrag zu?


Hallo Elliot, ich benutze dies auf einem Standardgerüst. Verwenden von inside index.html.erb zum Rendern von _show.html.erb, wobei show partiell modal enthält. Alles funktioniert einwandfrei, außer dass beim Drücken von show link dieselbe ID angezeigt wird, anstatt unterschiedliche IDs anzuzeigen.
Lernender

Antworten:


237

Versuche dies:

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

Auf diese Weise poststeht im Teil eine lokale Variable zur Verfügung.


18
Sie benötigen <% =%> keine <%%> Tags, sonst wird es nicht gerendert
Ryan

4
Denken Sie daran, Sie würden <%= render 'middle', :post => post %>für Schienen 3.1.x
Archonic

124

Geben Sie es dem Teil als lokale Variable

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

Natürlich hat Rails auch eine Verknüpfung zum Rendern von Sammlungen:

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

In diesem Fall wird der Teilbeitrag für jeden Beitrag mit einer lokalen Variablen 'Beitrag' aufgerufen.

Sie können sogar eine Spacer-Vorlage zwischen den einzelnen Posts rendern:

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

14
Ich wusste nichts über die Option: spacer_template, wirklich nett. Vielen Dank!
Claudio Acciaresi

11
Beachten Sie, dass der Hash: local bei Verwendung von Rails 3 nicht benötigt wird. Der Argument-Hash wird in Argumente konvertiert, die an den Teil übergeben werden.
Superluminary

4
Ich brauchte noch: Einheimische Hash, damit es funktioniert .. Ich laufe 3.2.12
mck

1
<%= render :partial => 'post', :collection => @posts, as: :post %>wird automatisch postin Ihrem Teil durchlaufen , so dass Sie postin Ihrem Teil als Variable verwenden können.
Ahnbizcad

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

Sie können jetzt als lokale Variable postim Teil auf post zugreifen


10

Ersetzen <%= render middle %>durch <%= render middle, :post => post %>. Dann können Sie in Ihrem middleTeil auf die postVariable zugreifen .

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.