Pase una variable a una parcial, rieles 3?

140

Tengo un bucle como tal:

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

Luego, en mi parcial del medio, ¿cómo accedo a la publicación actual?

Elliot
fuente
Hola Elliot, estoy usando esto en andamios estándar. Uso de index.html.erb interno para representar _show.html.erb donde show parcial contiene modal. todo funciona bien, excepto que cuando presiono show link, muestra la misma identificación en lugar de mostrar diferentes identificaciones.
alumno

Respuestas:

237

Prueba esto:

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

Así tendrás una variable local postdisponible dentro del parcial.

polarblau
fuente
18
necesita <% =%> no <%%> etiquetas o de lo contrario no se procesará
Ryan
44
Tenga en cuenta que necesitaría <%= render 'middle', :post => post %>rieles 3.1.x
Archonic
124

Dáselo a lo parcial como una variable local

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

Por supuesto, rails también tiene un atajo para renderizar colecciones:

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

En este caso, llamará a la publicación parcial para cada publicación con una variable local 'publicación'

Incluso puede representar una plantilla espaciadora entre cada publicación:

<%= render :partial => 'post', :collection => @posts, :spacer_template => 'post_divider' %>
Stefaan Colman
fuente
14
No sabía sobre la opción: spacer_template, realmente agradable. ¡Gracias!
Claudio Acciaresi
11
Tenga en cuenta que el hash: locals no es necesario cuando se usa Rails 3. El hash de argumentos se convierte en argumentos que se pasan al parcial.
superluminary
44
Todavía necesitaba: hash local para que funcione. Estoy ejecutando 3.2.12
mck
1
<%= render :partial => 'post', :collection => @posts, as: :post %>recorrerá automáticamente cada uno posten su parcial, por lo que puede usar postsu parcial como variable.
ahnbizcad
14
<% @posts.each do |post| %>
  <% render middle, :post => post %>
<% end %>

Ahora puede acceder a la publicación como la variable local posten el parcial

Felix Andersen
fuente
10

Reemplazar <%= render middle %>con <%= render middle, :post => post %>. Luego, en su middleparcial, puede acceder a la postvariable.

sevenseacat
fuente