Ü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?

Elliot
quelle
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.

polarblau
quelle
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' %>
Stefaan Colman
quelle
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

Felix Andersen
quelle
10

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

Sevenseacat
quelle