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?


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.


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' %>

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


10

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.